본문 바로가기

Embedded 실습/AT91SAM7S2569

구조체를 이용한 메모리 접근 지금껏 ARM에 코딩할 때 define문으로 레지스터를 각각 지정하여 사용하는 방법을 썼는데, ATMEL사에서 제공하는 헤더파일을 이용하면각기 따로 define문을 이용하여 지정할 필요 없이바로 코드를 작성할 수 있다. 이는 메모리 주소와 구조체, 포인터의 특성을 이용하여 사용하는 것이다. #include #define BASE ((struct SMART *)0x12FF60) struct SMART { int A; int B; int C; int D; }; int main() { int array[4] = {0x11, 0x22, 0x33, 0x44}; int *ip = array; struct SMART *ssp; printf(" int[] : %X\t%X\t%X\t%X\n", array[0], arra.. 2013. 5. 22.
ADC(Analog-to-Digital Converter) 사용하기 - 4 ADC에 전원공급을 했으니 이제 타이밍 다이어그램을 참고하여 ADC를 이용하여 LCD에 출력할 수 있는 ADC_run()함수를 구현해보자. 위의 다이어그램은 특정 레지스터에 특정 값이 들어왔을 때 ADC_SR레지스터의 EOCx비트와 DRDY비트가 변화하는 것을 보여준다.좌측과 우측의 ①, ②, ③은 모두 동일하나 ④에서 다른 모습을 보여준다. ① ADC_CR의 START 비트를 1로 설정하면 ADC에서 값을 읽어오는 ② Conversion Time이 시작된다.Conversion Time이 완료되면 ③에서 처럼 ADC_SR레지스터의 EOCx와 DRDY비트가 HIGH로 설정되는데④ ADC_CDRx 레지스터를 읽을 경우 EOCx의 값은 LOW로 내려가지만 DRDY의 값은 변화가 없다.하지만 ④에서 처럼 ADC.. 2013. 5. 1.
ADC(Analog-to-Digital Converter) 사용하기 - 3 이번에는 ADC를 깨워주는 ADC_init()함수를 작성해보자.#define ADC_CR (*((volatile unsigned int *)0xFFFD8000))// Control Register :546P #define ADC_CHER (*((volatile unsigned int *)0xFFFD8010))// Channel Enable Register #define ADC_MR (*((volatile unsigned int *)0xFFFD8004))// Mode Register #define SWRST 0 // ADC_CR P.547 #define START 1 #define CH0 0 #define CH1 1 #define CH2 2 #define CH3 3 #define CH4 4 #define .. 2013. 5. 1.
ADC(Analog-to-Digital Converter) 사용하기 - 2 이제 ADC를 ARM칩의 DATA SHEET에 맞춰 코딩을 해본다.우선 ADC의 BLOCK DIAGRAM을 살펴보자. ADC를 우선 사용하려면 전원공급부터 해야 한다. PMC는 Power Management Controller 의 약자로 전원을 공급하는 유닛이다. PMC의 레지스터를 살펴보자. PMC_PCER이 각 주변장치(Peripheral)에 클럭을 공급해주는 레지스터임을 확인할 수 있다.그런데 PMC_PCER에는 주변장치의 ID를 입력해주어야 한다. ADC의 ID는 데이터 시트 10장 Peripheral에서 찾을 수 있다.ADC의 ID는 4인걸 알 수 있다. 이로써 PMC_PCER레지스터에 ADC에 해당하는 4번째 비트에 1을 대입해주면 ADC의 전원을 공급할 수 있다는걸 알 수 있다. #defin.. 2013. 5. 1.