[AnalogDevice]/ADuc7K2012. 11. 17. 16:32

[ADuc7061 EVM] 24bit ADC 테스트

[ADuc7061 EVM] 24bit ADC 테스트

ADuc7061에는 24bit ADC가 내장되어 있고 아날로그 파트에 있어 여러가지 옵션 설정을 쉽게 할수 있는 장점이 많다.

 

 

ADuc7061 ADC24 블록도

 

 

 

Aduc7601 ADC24 초기화 코드  

  
 // Configure ADC0 for continuous conversions, 1Khz, AIN0 in Single-ended mode
 ADCMSKI = BIT0; // Enable ADC0 result ready interrupt source
   ADCFLT = 0x7; // Chop off, 1Khz samping rate, SF = 7. No averaging
   ADCMDE = BIT0 + BIT7; // Continuous Conversion mode, Normal mode, 4Mhz clock source to ADC.
   ADC0CON = BIT1 +
     BIT6 +   // AIN0 selected in Single ended mode
     BIT10 +   // Unipolar ADC output
     BIT15;  // Gain = 1, Buffer on. Also, Int reference,
       
 ADCCFG = 0;
 IRQEN = BIT10; // Enable ADC interrupts   

 

  

 

 

 

 

 

 

 

 

Aduc7061 24bit ADC테스트 동영상

 

 

 

ADUC7061 테스트용 PC프로그램

 

 

 

ADuc7061 ADC인터럽트 처리코드

24bit ADC를 가진 MSP430AFE 와 비교 했을때 24bit ADC결과 레지스터가 32bit로 되어 있기 때문에 속도나 처리하는데 있어 상당히 편리하다.

__irq __arm void IRQ_Handler(void)
{
 unsigned long IRQSTATUS = 0;

 IRQSTATUS = IRQSTA;    // Read off IRQSTA register


 if ((IRQSTATUS & BIT10) == BIT10) //If ADC0 interrupt source
 {
    ulADC0Result = ADC0DAT; // Read ADC0 conversion result
 }

 

 

 

ADuc7061 24bit ADC테스트 예제코드

int main(void)
{
    unsigned int cnt = 0;
    SystemInit();
 
    Led1Init();

    //Serial Init
    DebugInit(BAUD_115200);
    DebugPrint("Aduc7061 EVM ADC Program.\r\n");

   
 ADC_Init();

    enable();
 while(1)
 {
  //UART Debug
  if(U0_IsGetByte())
  {
   switch(DebugGetByte())
   {
    case 'g':
                    DebugPrint("adc = %lu\r\n", ulADC0Result);
                    IRQEN |= BIT10;
                    Led1Off();
     break;
            }
        }
 }
}

 

 

 

 

Posted by nexp

댓글을 달아 주세요

[AnalogDevice]/ADuc7K2012. 11. 17. 16:28

[ADuc7061 EVM] UART 테스트

[ADuc7061 EVM] UART 테스트

 

ADuc7061 은 정밀 24bit ADC를 내장한 아날로그 마이크로 컨트롤러이다. 24bit ADC값을 테스트 하기위해 가장 쉬운 방법으로 UART로 ADC값을 정송하는것이기 때문에 UART를 포팅하면 쉽게 가능하다.

 

보데이트는 아래와같이 설정하면 오차율 적게 설정할 수 있다.

 

 

COMSTA0 레지스터를 이용하여 송수신 상태를 체크할 수 있다.

 

ADuc7061 UART 송수신 함수

unsigned char U0_GetByte(void)
{
    while ((COMSTA0 & 0x01) != 0x01)
    {
    }
   
    return COMRX;
}

 

void U0_PutByte(unsigned char Data)
{
    COMTX = Data;
    while ((COMSTA0 & 0x40) == 0x00)   // Wait for Tx buffer empty bit to be set
    {
    }
}

 

 

 

 

ADuc7061 UART테스트 코드

초기화, 송수신 함수만 포팅하면 기존 다른 MCU에서 테스트 했던 코드를 그대로 이용할 수 있다. 큰 문제 없이 잘 동작하는것을 확인 할 수 있다.

int main(void)
{
    unsigned int cnt = 0;
    SystemInit();
 
    Led1Init();

    //Serial Init
    DebugInit(BAUD_115200);
    DebugPrint("Aduc7061 EVM Serial Program.\r\n");

   
 while(1)
 {
  //UART Debug
  if(U0_IsGetByte())
  {
   switch(DebugGetByte())
   {
    case '0':
                    DebugPrint("LED OFF = %d\r\n", cnt--);
                    Led1Off();
     break;

                case '1':
                    DebugPrint("LED ON = %d\r\n", cnt++);
                    Led1On();
                 break;      
            }
        }
 }
}

Posted by nexp
TAG ADuc7061, UART

댓글을 달아 주세요

[AnalogDevice]/ADuc7K2012. 11. 17. 16:21

[ADuc7061 EVM] GPIO 테스트

[ADuc7061 EVM] GPIO 테스트

 

 ADuc7061의 GPIO는 기본적으로 ARM7 구조이고, 3개의 포트에서 16개의 IO가 있다.

 

 

 

ADuc7061의 GPIO는 아래 3개의 레지스터로 설정가능하다.

 

 

 

 

 

 

 

 

 

 

ADuc7061 LED 드라이버 코드

[ADuc7061 EVM] 보드에는 GPIO테스트를 위한 LED가 P2.0에 연결되어 있다.

//-----------------------------------------------------------------------------
//LED Driver
#define LED1_BIT      GPIO_SET_DAT(0)
#define LED1_PORT      GPIO_SET_DAT(0)
#define Led1Off()      sbi(GP2SET, LED1_BIT)
#define Led1On()      cbi(GP2CLR, LED1_BIT)
#define Led1Toggle()     Tbi(GP2DAT, LED1_BIT)
#define Led1Init()       Sbi(GP2DAT, GPIO_SET_CONF(0));  // Configure P2.0 as an output 

//-----------------------------------------------------------------------------

 

 

 

ADuc7061 GPIO테스트 예제코드

int main(void)
{
    SystemInit();
 
    Led1Init();

 while(1)
 {
        Delay(100);
        Led1On();
       
        Delay(100);
        Led1Off();       
 }
}

Posted by nexp
TAG ADuc7061

댓글을 달아 주세요

[AnalogDevice]/ADuc7K2012. 11. 17. 16:18

[ADuc7061 EVM] 클럭 설정

[ADuc7061 EVM] 클럭 설정

 

ADuc7061의 클럭의 블록도는 아래 그림과 같다.

기본적으로 내부 3%오차를 가진 32kHz 오실레이터를 이용하여 10.24Mhz로 구동된다. 외부에 32k 크리스탈을 연결하거나 10.24Mhz OSC를 연결 할 수 있다.

 

 

 

ADuc7061 클럭 시스템 초기화 코드

void SystemInit(void)
{
 POWKEY1 = 0x1;
 POWCON0 = 0x78;     // Set core to max CPU speed of 10.24Mhz
 POWKEY2 = 0xF4;
}

 

 

 

Posted by nexp
TAG ADuc7061

댓글을 달아 주세요

[AnalogDevice]/ADuc7K2012. 11. 16. 16:14

[ADuc7061 EVM] 개발환경 설정 - 컴파일 및 펌웨어 다운로드

[ADuc7061 EVM] 개발환경 설정 - 컴파일 및 펌웨어 다운로드

 

Aduc7061 은 ARM코어 이고 32K Flash 이므로 IAR무료버전으로 컴파일 가능하다.

 

IAR 5.x 이상 이용하면 ADuc7061 을 컴파일 할수 있다. 빈 프로젝트 생성하고 옵션에서 디바이스를 선택한다.

 

 

 

빈 프로젝트 생성

 

 

ADuc7061 디바이스 선택

 

 

 

IAR에서 제공하는  기본 

 

 

 

 


시리얼 펌웸어 다운로드

ADuc7K 시리즈는 공장출하시 부트로드가 들어있기 때문에 시리얼포트를 이용하여 펌웨어를 다운로드 할 수 있다.

 

 

ARMWSD.zip

 

부트모드핀을 프로그램 모드 설정 ARMWSD 프로그램 실행하고 컴포트 설정한 후 리셋 하면 프로그램 모드로 진입할 수 있다.

 

 

 

 

 

 

 

 

 

Posted by nexp
TAG ADuc7061

댓글을 달아 주세요