[TMS320F2808 EVM] TFT LCD Test - LCD-PLD-IF 보드 이용



[TMS320F2808 EVM] 보드를 이용하여 TFT LCD테스트를 했다. PICCOLO 시리즈인 TMS320F28069 테스트때 SPI속도가 늦어 SD Card 읽어 오는 속도가 느렸는데 TMS320F2808이 조금 더 빠른것 같다.


TMS320F2808 TFT LCD테스트 동영상



TMS320F2808 TFT LCD 드라이버 코드
//-----------------------------------------------------------------------------
// TFT LCD Driver
#define TFT_DRV_HD66791     0
#define TFT_DRV_COM44     1

#define LCD_LAT_BIT      BIT2 //-> GPIO34
#define LCD_LAT_PORT     PORTB

#define LCD_LAT_ON()     Sbi(LCD_LAT_PORT, LCD_LAT_BIT);NOP();
#define LCD_LAT_OFF()     Cbi(LCD_LAT_PORT, LCD_LAT_BIT);NOP();
#define LCD_DATA_LATCH()    LCD_LAT_ON();LCD_LAT_OFF();

#define LCD_EN_BIT      BIT20
#define LCD_EN_PORT      PORTA
#define LCD_ENABLE()     Cbi(LCD_EN_PORT, LCD_EN_BIT);NOP();
#define LCD_DISABLE()     Sbi(LCD_EN_PORT, LCD_EN_BIT);NOP();

#define LCD_RST_BIT      BIT6
#define LCD_RST_PORT     PORTA
#define LCD_RST_ON()     
#define LCD_RST_OFF()     

#define LCD_RS_BIT      BIT21
#define LCD_RS_PORT      PORTA
#define LCD_RS_OFF()     Cbi(LCD_RS_PORT, LCD_RS_BIT);NOP();
#define LCD_RS_ON()      Sbi(LCD_RS_PORT, LCD_RS_BIT);NOP();

#define LCD_WR_BIT      BIT23
#define LCD_WR_PORT      PORTA
#define LCD_WR_OFF()     Cbi(LCD_WR_PORT, LCD_WR_BIT);NOP();
#define LCD_WR_ON()      Sbi(LCD_WR_PORT, LCD_WR_BIT);NOP();

#define LCD_RD_BIT      //BIT7
#define LCD_RD_PORT      //
#define LCD_RD_OFF()     //Cbi(LCD_RD_PORT, LCD_RD_BIT)
#define LCD_RD_ON()      //Sbi(LCD_RD_PORT, LCD_RD_BIT)

#define LCD_BL_BIT      BIT15
#define LCD_BL_PORT      PORTA
#define LCD_BL_OFF()     Cbi(LCD_BL_PORT, LCD_BL_BIT)
#define LCD_BL_ON()      Sbi(LCD_BL_PORT, LCD_BL_BIT)


#define _LCD_DAT_OUT(Data)    GpioDataRegs.GPADAT.all = (GpioDataRegs.GPADAT.all&(~0xFF)) | (Data>>8)&0xFF;NOP();\
          LCD_DATA_LATCH();\
          GpioDataRegs.GPADAT.all = (GpioDataRegs.GPADAT.all&(~0xFF)) | (Data&0xFF)&0xFF;NOP();
          

#define TFTGpioInit()     EALLOW;\
          Sbi(GpioCtrlRegs.GPADIR.all, 0xFF);\
          Cbi(GpioCtrlRegs.GPAMUX1.all, 0xFF);\
          GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0;\
          GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1;\
          GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 0;\
          GpioCtrlRegs.GPADIR.bit.GPIO21 = 1;\
          GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 0;\
          GpioCtrlRegs.GPADIR.bit.GPIO20 = 1;\
          GpioCtrlRegs.GPAMUX2.bit.GPIO23 = 0;\
          GpioCtrlRegs.GPADIR.bit.GPIO23 = 1;\
          GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 0;\
          GpioCtrlRegs.GPADIR.bit.GPIO15 = 1;\
          EDIS;
//-----------------------------------------------------------------------------

[TMS320F2808] 메모리 할당 에러

[DSP]/DSP280x-M | 2011.10.29 16:19
Posted by nexp
[TMS320F2808] 메모리 할당 에러
TFT LCD, TCP/IP, FAT 를 올리고 컴파일 하니 에러가 발생한다.

"D:\\WORK\\DSP\\dsp280x-m\\DSP280x_common\\cmd\\2808_RAM_lnk.cmd", line 111: error:
   placement fails for object ".text", size 0x1182 (page 0).  Available ranges:
   PRAMH0       size: 0x1000       unused: 0x1000       max hole: 0x1000   

error: errors encountered during linking; "./Debug/dsp280x_evm.out" not built

코드영역(.text) 이 부족 하다고 한다. 8K(0x1000)가 코드 영역(PRAMH0)으로 할당되어 있다.


TMS320F2808은 스펙에 18Kx16 SRAM이 있다. 넉넉해 보이지만 코드영역을 RAM으로 올려야 하기 때문에 테스트 용으로는 상당히 부족하다.





시리얼 디버깅 삭제하고, 옵티마이즈 하니 1K안으로 들어오긴 한다. 하지만 코드가 좀더 늘어나면 문제가 있을것 같다.




앞으로 추가적인 예제는 코드를 줄이던지 플래시에 올려서 테스트 하던지 해야 할것 같다.



[TMS320F2808 EVM] W5200 이용한 TCP Server 전송 속도 테스트


TMS320F2808의 SPI 최대 속도는 6.2Mhz 정도 이고 이때 TCP 전송 속도는 1.5831 Mbps 정도 나온다.
결론 적으로 CPU속도는 나쁘지 않는데.. SPI클럭 속도가 너무 느리다. SPI속도를 요하는 어플리케이션은 고려할 필요가 있는것 같다.
그래도 1.5Mbps면 간단한 웹서버 정도 돌리는데는 문제가 없을것 같다.


[NET_EXP] W5100 / W5200 모듈 보드 핀맵



[DSP280x-M EVM] C28x Signal Generator Library 테스트
TI에서 제공하는 C28x용 라이브러리 는 여러가지로 유용한 점이 많은데 그중 가장 기본이 되는 C28x Signal Generator Library 를 이용하여 신호를 생성하는 테스트를 진행 했다.


TI제공 라이브러리 및 소스코드


우선 소스코드를 다운 받아서 라이브러리를 인클루드 해 준다.
sgen.h
sgen.lib

생성 한 신호를 확인하기 위해 여러가지 방법이 있지만 가장 간단하게 할 수 있는것이 PC USB2UART 이다. 신호 생성용 라이브러리를 이용하여 생성후 시리얼로 데이터 전송하여 확인하면 쉽게 생성된 데이터를 확인 할수 있다.



Single Channel SIN Generator (Table look-up)
신호 생성 라이브러리에느 여러 신호 생성 테이블이 있는데 그중 가장 간단한 사인(sin)파 생성을 방법을 살펴 보면 아래와 같은 구조로 구성되어있다.



데이터 타입(SGENT_1)은 SGENT_1_DEFAULTS, SGENT_1_handle 두가지로 생성 할수 있다. SGENT_1_handle는 사용자 정의 테이블 이므로 일단 Default로 생성 한다

//신호 생성 메모리 할당
SGENT_1 sgen1 = SGENT_1_DEFAULTS;

주파수 및 각 파라메터 설정
기본 최대 주파수는 20Khz샘플레이트에서 step_max가 1000으로 설정되고 305.17Hz가 된다. 당연히 2000으로 설정하면 610Hz가 되겠지...
적절히 잘 조절하면 원하는 주파수를 생성할 수 있다. 물론 주파수가 높아지면 신호는 정밀도가 떨어지지만...



TMS320F2808 신호 생성 테스트 예제
코드 아주 심플하여 쉽게 적용 가능하다. 메모리 할당하고 sgen1.calc() 함수로 신호를 생성후 sgen1.out 신호를 PWM 또는 DAC로 출력하면 된다.

//신호 생성 메모리 할당
SGENT_1 sgen1 = SGENT_1_DEFAULTS;

void main(void)
{
 //DSP System Initialize
 SystemInit();

 Led1Init();
 Led1On();

 DebugInit(BAUD_57600);
 DebugPrint("Signal Gen Test\r\n");

 //신호 생성 초기화
 sgen1.offset=0;
 sgen1.gain=0x7fff;        // gain=1 in Q15                              
 sgen1.freq=5369;          /* freq = (Required Freq/Max Freq)*2^15       */
                                 /*      = (50/305.17)*2^15 = 5369             */         
 sgen1.step_max=1000;      /* Max Freq= (step_max * sampling freq)/65536 */
                                       /* Max Freq = (1000*20k)/65536 = 305.17       */
 while(1)
 {
  //신호 생성
  sgen1.calc(&sgen1);
  sig1=sgen1.out;
  
  //신호 출력
  U0_PutInt(sig1);

  Led1Toggle();
  Delay(50);
 }
}


테스트 동영상



추가로 데이터 로그 라이브러리를 이용하면 Code Composer Studio에서 제공하는 그래프 기능을 사용 하여 쉽게 디버깅 할 수 있다. (물론 위 방법보다 실시간성은 떨어지지만...)




그래프 보기 설정



소스코드

//데이터 로그모듈 생성
DLOG_4CH dlog=DLOG_4CH_DEFAULTS;    

main()
{
 :
 //데이터 로그 초기화      
 dlog.iptr1=&sig1;
 dlog.trig_value=0x800;
 dlog.size=1024;         //데이터 샘플수 1024 Samples
 dlog.init(&dlog);



 

 while(1)
 {
  //신호 생성
  sgen1.calc(&sgen1);
  sig1=sgen1.out;
  
  //신호 출력
  U0_PutInt(sig1);

 //그래프 업데이트
  dlog.update(&dlog);

  Led1Toggle();
  Delay(50);
 }





 

[DSP280x-M EMV]SPI 테스트 - 3축 가속도 센서(LIS3LV02) 데이터 로깅


TMS320F2808 의 SPI통신을 이용하여 3축 가속도 센서 LIS3LV02를 테스트 했다. 확장 테스트 보드에 가속도 센서를 장착할 수 있기 때문에 쉽게 테스트 가능하다.

TMS320F2808에는 4개의 독립적인 SPI포트가 있는데 이중 표준커넥터로 뽑아둔 SPIA(P16~P19)를 이용한다.



확장 보드에서 LIS3LV02는 SPI포트에 연결되어 있고 CS핀은 P22에 연결되어 있다.



PC 호스트 프로그램



TMS320F2808 3축 가속도 센서 테스트 동영상



DSP280x-M SPI테스트를 위해 Code Composer Studio에 SPI관련 소스 및 가속도 센서 코드 추가



TMS320F280x SPI블럭도






SPI Mode설정
LIS3LV02제어를 위해서는 SPI Mode0로 설정해야한다. SPICCR, SPICTL레지스터에서 설정할 수 있다.




SPI 설정


SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;
SpiaRegs.SPICTL.bit.CLK_PHASE = 0;   //SPI MODE0

 //SPI 초기화
 SpiaRegs.SPICCR.bit.SPISWRESET = 0;
 SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;
 SpiaRegs.SPICCR.bit.SPILBK = 0;  //루프백 비사용
 SpiaRegs.SPICCR.bit.SPICHAR = 7;  //8비트 모드 
 SpiaRegs.SPICCR.bit.SPISWRESET = 1; // Ready to transmit

 SpiaRegs.SPICTL.bit.SPIINTENA = 0; //인터럽트 비사용
 SpiaRegs.SPICTL.bit.TALK = 1;   // Transmit enable
 SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1; //SPI마스터 모드
 SpiaRegs.SPICTL.bit.CLK_PHASE = 0;   //SPI MODE0
 SpiaRegs.SPICTL.bit.OVERRUNINTENA = 0; //Overrun interrupt disable

 SpiaRegs.SPIPRI.bit.FREE = 1;       // Set so breakpoints don't disturb xmission


SPI클럭 속도 설정
SpiaRegs.SPIBRR 레지스터에서 설정 가능하다.

 //SPI 클럭속도 설정
 SPI0_SetSpeed(SPI_SPEED_4MHZ);



 //SPI GPIO초기화
 EALLOW;
    GpioCtrlRegs.GPAPUD.bit.GPIO16 = 0;   // Enable pull-up on GPIO16 (SPISIMOA)
    GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0;   // Enable pull-up on GPIO17 (SPISOMIA)
    GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0;   // Enable pull-up on GPIO18 (SPICLKA)
    GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0;   // Enable pull-up on GPIO19 (SPISTEA)

    GpioCtrlRegs.GPAQSEL2.bit.GPIO16 = 3; // Asynch input GPIO16 (SPISIMOA)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3; // Asynch input GPIO17 (SPISOMIA)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO18 = 3; // Asynch input GPIO18 (SPICLKA)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO19 = 3; // Asynch input GPIO19 (SPISTEA)
   
    GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1; // Configure GPIO16 as SPISIMOA
    GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1; // Configure GPIO17 as SPISOMIA
    GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 1; // Configure GPIO18 as SPICLKA
    GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 1; // Configure GPIO19 as SPISTEA
    EDIS;
 
 //SPI FIFO 초기화
    SpiaRegs.SPIFFTX.all=0xE040;
    SpiaRegs.SPIFFRX.all=0x204f;
    SpiaRegs.SPIFFCT.all=0x0;


TMS320F2808 3축 가속도 센서 테스트 소스
void main(void)
{
 short data = 0;
 unsigned int flag = 0;

 //DSP System Initialize
 SystemInit();

 Led1Init();
 Led1On();

 DebugInit(BAUD_57600);
 DebugPrint("SPI Test\r\n");

 myAccel3lvInit();
 myAccel3lvWrite(CTRL_REG1, 0xD7);  //1000.0111 Power on, enable all axis, self test off
 myAccel3lvWrite(CTRL_REG2, 0x40);

 while(1)
 {
  if(DebugIsByte())
  {
   switch(U0_GetByte())
   {
   case '0':
    Led1Off();
    DebugPrint("LED OFF\r\n");
    break;

   case '1':
    Led1On();

    DebugPrint("LED ON\r\n");   
    break;

   case 'h':
    DebugPrint("device_id=");
    U0_PutInt(myAccel3lvRead(WHO_AM_I));
    break;

 case 'r':
    GetAccelValue(AXIS_X, &data);
    U0_PutInt(data);  
    break;
}
}
[DSP280x-M EVM] 보드 테스트 - ADC, PWM 테스트(eCAP PWM)

TMS320F2808의 ADC값을 읽어 PWM으로 출력하는 테스트.


[DSP280x-M EVM]에는 PWM0~PWM3의 PWM을 할당해 두었다. 확장보드의 PWM3은 TMS320F2808의 P11에 연결되어 있고 가각 PWM6B/eCAP4/RXDB 기능을 가지고 있다.
그중에서 확장보드의 LED2에 연결되어 있는 PWM3을 이용하여 ADC값에 따라 PWM출력을 제어 하고 이 출력이 고휘도 LED의 밝기를 설정하는 예제를 작성하기 위해 32bit 분해능의 eCAP4로 PWM을 출력해 보았다.


확장 테스트 보드에서 PWM3은 CN40, LED2에 연결되어 있다.



TMS210F2808 PWM테스트 동영상
- 가변 저항값에 따라 PWM출력을 변경하고 이에 따라 PWM을 이용한 고휘도 LED출력



TMS320F2808 eCAP을 이용한 PWM테스트 예제소스
P11(eCAP4) 초기화 설정
#if _ENABLE_ECAP4
#define PwmSetEcap4(Period)     ECap4Regs.CAP2 = (ECap4Regs.CAP1-(ECap4Regs.CAP1*Period/100))
#define PwmSetPeriodEcap4(Freq, Period)  ECap4Regs.CAP1 = 100000000/(Freq);PwmSetEcap4(Period)

void Ecap4_Config(unsigned long Freq)
{
   EALLOW;
// P11 풀업 설정
   GpioCtrlRegs.GPAPUD.bit.GPIO11 = 0;   // Enable pull-up on GPIO11 (CAP4)

// SYSCLKOUT와 동기화된 입력으로 설정
   GpioCtrlRegs.GPAQSEL1.bit.GPIO11 = 0; // Synch to SYSCLKOUT GPIO11 (CAP4)
// P11을 eCAP-4으로 설정
   GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 3;  // Configure GPIO11 as CAP4
   EDIS;
    :
}

pwm.c 함수
void InitPwm(void)
{
 Ecap4_Config(50);   //50Hz, duty 50%
}

void PwmSet3(unsigned int Period)
{
 PwmSetEcap4(Period);
}

main 함수

void main(void)
{
 unsigned int pwm_period = 50;
 unsigned int temp = 0;

 //DSP System Initialize
 SystemInit();

 Led1Init();
 Led1On();

 DebugInit(BAUD_57600);
 DebugPrint("ePWM Test Program\r\n");

 //Init PWM
 InitPwm();

 //ADC Init
 AdcInit();

 while(1)
 {
  temp = ((float)AdcRead(8)/4095.0*100.0);

  PwmSet3(temp);
  U0_PutInt(temp);
  Delay(50);
 }
}

[DSP280x-M EVM]보드 테스트 - TMS320F2808 ePWM 1Mhz PWM제어



#define PWM_10KHZ    10000 //10 KHz
#define PWM_100KHZ    1000 //100 KHz
#define PWM_125KHZ    800  //125 KHz
#define PWM_167KHZ    600  //167 KHz
#define PWM_200KHZ    500  //200 KHz
#define PWM_400KHZ    250  //400 KHz
#define PWM_500KHZ    200  //500 KHz
#define PWM_1MHZ    100  //1 MHz
#define PWM_2MHZ    50  //2 MHz
#define PWM_4MHZ    25  //4 MHz
#define PWM_5MHZ    20  //5 MHz
#define PWM_8_33MH    12  //8.33 MHz
#define PWM_10MHZ    10  //10.0 MHz
#define PWM_20MHZ    5  //20.0 MHz

void InitPwm(void)
{
  HRPWM6_Config(PWM_1MHZ );   //1MHz, duty 50%
}

void PwmSet3(unsigned int Period)
{
 SetPwm6APeriod(PWM_1MHZ , Period);
}


#if _ENABLE_PWM6
void SetPwm6Period(unsigned int Frequency, unsigned int Period)
{
    EPwm6Regs.TBPRD = Frequency;
    EPwm6Regs.CMPA.half.CMPA = Frequency-(Frequency*(Period/100));
}

void SetPwm6APeriod(unsigned int Frequency, unsigned int Period)
{
    EPwm6Regs.TBPRD = Frequency;
    EPwm6Regs.CMPA.half.CMPA = Frequency-(Frequency*(Period/100));
}

void SetPwm6BPeriod(unsigned int Frequency, unsigned int Period)
{
    EPwm6Regs.TBPRD = Frequency;
    EPwm6Regs.CMPB = Frequency-(Frequency*(Period/100));
}

void HRPWM6_Config(unsigned int Freq)
{
   EPwm6Regs.TBPRD = period;                      // Set timer period
   EPwm6Regs.TBPHS.half.TBPHS = 0x0000;           // Phase is 0
   EPwm6Regs.TBCTR = 0x0000;                      // Clear counter

   // Setup TBCLK
   EPwm6Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
   EPwm6Regs.TBCTL.bit.PHSEN = TB_DISABLE;        // Disable phase loading
   EPwm6Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;       // Clock ratio to SYSCLKOUT
   EPwm6Regs.TBCTL.bit.CLKDIV = TB_DIV1;

   EPwm6Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;    // Load registers every ZERO
   EPwm6Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
   EPwm6Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
   EPwm6Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;   


    :
}


main()함수
#include "system.h"
#include "serial.h"
//#include "timer.h"
#include "epwm.h"

void main(void)
{
 //DSP System Initialize
 SystemInit();

 Led1Init();
 Led1On();

 DebugInit(BAUD_57600);
 DebugPrint("ePWM Test Program\r\n");

 InitPwm();

while(1)
 {
  if(DebugIsByte())
  {
   switch(DebugGetByte())
   {
    case '+':
     DebugPrint("PWM=");
     U0_PutInt(pwm_period);
     DebugPrint("\r\n");
     SetPwm6Period(PWM_FREQ, pwm_period);
     pwm_period++;
     break;

    case '-':
     DebugPrint("PWM=");
     U0_PutInt(pwm_period);
     DebugPrint("\r\n");
     SetPwm6Period(PWM_FREQ, pwm_period);
     pwm_period--;
     break;
   }
  }
 }
}
[DSP280x-M EVM] 보드테스트 - ADC, UART 테스트 (TMS320F2808)



TMS320F2808 의 ADC값을 UART로 전송하는 테스트 프로그램 작성.

[DSP280x-M EVM]보드에는 ADCB0~ADCB7까지 8개의 ADC가 할당되어 있다. 확장 테스트 보드의 ADC0가 ADCB0에 연결되어 있기 때문에 TMS320F2809 ADC Channel8에서 VR값을 읽을 수 있다.




TMS320F2808 ADC, UART 테스트 동영상



PC프로그램
ADC값을 읽어 UART로 전송하면 그 값을 디버깅하기 위한 PC프로그램



TMS320F2808 ADC, UART(SCI)테스트 소스코드
 void AdcInit(void)
{
   EALLOW;
   SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/ADC_MODCLK
   EDIS;
    
   InitAdc();  // For this example, init the ADC

   // Specific ADC setup for this example:
   AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;
   AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;    
   AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;        // 1  Cascaded mode
   AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x8;
   AdcRegs.ADCTRL1.bit.CONT_RUN = 1;       // Setup continuous run 
  
     // Start SEQ1
   AdcRegs.ADCTRL2.all = 0x2000;
}

unsigned int AdcRead(unsigned int Cnannel)
{     
 AdcRegs.ADCCHSELSEQ1.bit.CONV00 = Cnannel;
 AdcRegs.ADCTRL1.bit.CONT_RUN = 1;       // Setup continuous run

  while (AdcRegs.ADCST.bit.INT_SEQ1== 0) {} // Wait for interrupt

   asm(" RPT #11 || NOP");
  AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
   return (AdcRegs.ADCRESULT0>>4);
}



void main(void)
{
 unsigned int temp = 0;
 unsigned int cnt = 0;
 
 //DSP System Initialize
 SystemInit()
 Led1Init();
 Led1On();

DebugInit(BAUD_57600);

 DebugPrint("ADC TEst Test\r\n");
 AdcInit();

 while(1)
 {
  switch(U0_GetByte())
  {
  case '0':
     Led1Off();
   DebugPrint("LED OFF\r\n");
     break;
  case '1':
   Led1On();DebugPrint("LED ON\r\n");   
     break;
 case 'c':
   DebugPrint("CNT="); 
   U0_PutInt(cnt++);
   break;
      
  case 'r':
   DebugPrint("ADC="); 
   temp = AdcRead(8);
   U0_PutInt(temp);
   break; 
  } 
 }
}  



TMS320F2808에는 2개의 SCI모듈이 있고 [DSP280x-M EVM] 보드에 표준 핀맵으로 연결되어 있다.



USB2UART 통신 모듈
USB로 전원 공급 및 UART통신이 가능하다.



초기화 함수
// Serial Prot0 Utility Fuction Routine
void U0_Init(unsigned char baud)
{
//SCI 포트 초기화
 InitSciaGpio();

  //SCI FIFO설정
  SciaRegs.SCIFFTX.all=0xE040;
  SciaRegs.SCIFFRX.all=0x204f;
  SciaRegs.SCIFFCT.all=0x0;

  //보레이트 설정
  U0_SetBaud(baud);

  SciaRegs.SCICCR.all =0x0007;   // 1 stop bit,  No loopback
                                   // No parity,8 char bits,
                                   // async mode, idle-line protocol
 SciaRegs.SCICTL1.all =0x0003;  // enable TX, RX, internal SCICLK,
                                   // Disable RX ERR, SLEEP, TXWAKE
 SciaRegs.SCICTL2.all =0x0003;
 SciaRegs.SCICTL2.bit.TXINTENA =1;
 SciaRegs.SCICTL2.bit.RXBKINTENA =1;
 
 SciaRegs.SCICTL1.all =0x0023;  // Relinquish SCI from Reset 
}


SCI 송수신 함수
#define WaitForSend()    while(SciaRegs.SCIFFTX.bit.TXFFST != 0)
#define WaitForReceive()      while(SciaRegs.SCIFFRX.bit.RXFFST !=1)
#define WaitForSend1()    while(!(ScibRegs.SCICTL2.bit.TXEMPTY))
#define WaitForReceive1()      while(!(ScibRegs.SCIRXST.bit.RXRDY))
#define TxData(Data)    (SciaRegs.SCITXBUF = (Data))
#define RxData()     (SciaRegs.SCIRXBUF.all)
#define Tx1Data(Data)    (ScibRegs.SCITXBUF = (Data))
#define Rx1Data()     (ScibRegs.SCIRXBUF.all)

unsigned char U0_GetByte(void)
{
 WaitForReceive();
 
 return RxData();
}

void U0_PutByte(unsigned char Data)
{
    WaitForSend();
    TxData(Data);
}
[DSP280x-M EVM] 보드 테스트 - LED, Switch, Buzzer GPIO 테스트


myMCU-EXP보드를 이용하여 [DSP280x-M EVM] 보드 테스트를 진행했다.
TMS320F2809의 GPIO 테스트 하기 위해 LED(P10), SWITCH(P27), Buzzer(P11)에 연결된 GPIO Port10, 11, 27 를 테스트 했다.

개발환경 환경설정
기존에 제작했던 다른 MCU의 코드와 호환되도록 하기 위해 Code Composer Studio 프로젝트파일을 좀 수정했다.



driver 파일 및 include 파일 옵션 설정



확장 보드 <->TMS320F2808  핀맵
myMCU-EXP  DSP280x-M EVM
 

 

LED1 -> PWM2 -> P10
SWITCH1 -> INT0 -> P27
BUZZER ->PWM3 -> P11



TMS320F2808 EVM - LED, Buzzer, Switch 회로도




테스트 동영상



TMS320F2809 LED, Switch, Buzzer 테스트 예제 소스
//Buzzer
void Buzzer(unsigned int Time)
{
 unsigned int i;
 BUZZER_ON();
 Delay(Time);
 BUZZER_OFF();
}

void main(void)
{
 //DSP System Initialize
 SystemInit();

 Led1Init();
 Led1On();

 Led2Init();
 Led2Off();

 Sw1Init();
 BUZZER_INIT()

 while(1)
 {
  //Led Toggle
  Led2Toggle();
  Delay(200);

  //Switch Status
  if(GetSw1())
  {
   Led1On();
   Buzzer(200); 
  }
  else Led1Off();
 }
}  

블로그 이미지

nexp

카테고리

분류 전체보기 (1550)
[MyProject] (48)
[TI] (75)
[NXP] (51)
[ST_MICRO] (129)
[FreeScale] (31)
[MSP430] (139)
[Microchip] (131)
Cortex-M (36)
[ATMEL] (29)
[AnalogDevice] (22)
[Embedded] (2)
ARM9 (24)
[AVR] (80)
[DSP] (111)
[8051] (21)
[MCU] (50)
[INTERFACE] (210)
[AppBoard] (23)
[ROBOT] (25)
[MODULE] (127)
[SENSOR] (41)
[DATA] (21)
[FPGA] (29)
[EVB] (1)
[Proramming] (38)
[MyLog] (6)
[IDEA] (0)
[Utility] (19)
[Book] (24)
취미생활 (4)
[Link] (2)