ARM(6)
-
[Cortex-M3] CMSIS 라이브러리 - 1 (RCC / NVIC / GPIO)
STM32사에서 만든 ARM을 위한 라이브러리 CMSIS라이브러리를 알아보자. 1. 먼저 clock을 제공하는 RCC 라이브러리 구조이다. 이와 같이 RCC_ABP(1/2)Periph_(name)이 주소로 define 되어있고, RCC_APB1PeriphClockCmd()함수에 아까의 주소, ENABLE/DISABLE이 인자로 들어간다. 이 함수를 설정하면 RCC->APB(1/2)ENR 레지스터를 설정할 수 있다. 이를 통해 원하는 Peripheral에 clock을 손쉽게 제공할 수 있다. 2. NVIC 라이브러리 NVIC를 설정하는 NVIC_init의 구조는 다음과 같이 생겼다. IRQChannel은 IRQ채널을 결정하고, NVIC_IRQChannelPreemptionPriority 는 첫번째 우선순위..
2019.11.19 -
RAVPO - Robot Arm Video Processing for Omok
https://github.com/dltmdgh0611/RAVPO_v1/tree/master/RAVPO_v1 dltmdgh0611/RAVPO_v1 Contribute to dltmdgh0611/RAVPO_v1 development by creating an account on GitHub. github.com 프로젝트 진행 계획 1단계 motion capture / video processing robot arm 모션 캡처와 영상처리를 이용하여 영상에 발견된 물체를 향해 로봇팔이 움직여 집는 기능 (완료) 2단계 3d프린터 프레임을 사용하고 영상처리를 통한 스스로 오목두는 기계 오목 봇 - 영상 처리 프로그램 - MCU간의 통신 (진행 중) 3단계 3d프린터 프레임을 로봇팔로 대체 3d프린터의 xy방식에..
2019.11.16 -
[Cortex-M3] 5. Systick, TimerX 제어하기 (2)
이번에는 systick에 이어서 ARM의 타이머를 알아보도록 하자 먼저 sysclk이 AHB 프리스케일러로 들어온다. 여기서 분주비로 나눠서 시스템 클락, APB1, APB2로 제공된다. APB1에서는 분주비로 나눠서 APB1의 페리페럴에게 제공된다. 또한, 타이머 2/3/4에게 제공되며 아까 나뉜 클락을 2배로 증폭시킬수도 있다. APB2에서도 분주비로 나눠서 APB2의 페리페럴에게 제공한다. 이제 타이머들을 제어할 레지스터들을 다뤄보도록 하자. 1. TIMx_CR1 (TIMx Control Register1) Bit 7 ARPE(Auto-reload preload enable) : 자동 리로드 프리로드 활성화 비트 Bit 4 DIR(Direction) : 타이머 방향을 조정하는 비트 Bit 0 CEN..
2019.09.09 -
[Cortex-M3] 4. Systick, TimerX 제어하기 (1)
오늘은 systick을 이용하여 타이머를 만들고, millis구조를 사용하는 방법을 배웠다. systick은 기본적으로 72MHz를 사용하며, 분주를 사용하여 헤르츠를 낮출수 있다. 이제 systick을 다룰 레지스터를 알아보자. 1. STK_CTRL (SysTick control and status register) 여기서는 enable에서 필요한 ENABLE비트만 이해하고 다음 시간에 배우는걸로 넘어가도록 하자. ENABLE (counter enable) : 0 - counter disable 1- counter enable 2. STK_LOAD (SysTick reload value register) 이 RELOAD가 24비트로 이루어진 레지스터는 분주비를 설정하는 레지스터이다. 72MHz로 들어오..
2019.09.08 -
[Cortex-M3] 3. EXTI(외부 인터럽트)와 AFIO, NVIC
EXTI(외부 인터럽트)가 일어나는 과정과 내부 아키텍처에 대해 알아보자. 외부에서 input이 들어오면 다음과 같은 처리를 하여 이루어진다. 1. falling trigger와 rising trigger를 거쳐 인터럽트를 검출한다 2. 마스크 레지스터와 and논리회로를 거쳐 enable 상태일때 통과시킨다. 3. pending 레지스터를 거쳐 nvic컨트롤러로 향한다. 인터럽트는 0~15번까지 존재하며 16~19번 인터럽트는 특수한 인터럽트이다. 간단한 구조를 알아보았으니 제어를 하기 위하여 레지스터를 알아보자. GPIO는 항상 쓰이기 때문에 확실히 외워두고 알아보는게 좋을 듯 하다. 1. EXTI_RTSR (Rising Trigger Selection Register) TRx : 해당 인터럽트를 ri..
2019.09.02 -
[Cortex-M3] 2. Cortex-M3의 GPIO 두번째
저번에 이어서 GPIO 레지스터를 계속 알아보도록 하자. 4. BSRR (Port bit set/reset register) BSRR은 포트를 세트하거나, 리셋하는 레지스터 이다. BR비트가 리셋, BS비트가 세트를 담당한다. 5. BRR (Port bit reset register) BRR은 리셋만 하는 레지스터이다. BR비트가 리셋을 하고, BSRR로 세트 BRR로 리셋하는게 효율이 좋다고 한다. ODR을 쓰는것보다 속도가 BSRR과 BRR을 쓰는것이 연산처리가 간단하여 더 빠르게 사용할 수 있다. 6. IDR (Port input data register) IDR은 ODR과 비슷하게 0번에서 15번핀의 외부 입력값을 받아오는 역할을 한다. 스탠다드 GPIO의 기본 구조 마지막으로 gpio의 구조에 ..
2019.08.27