[DSP]/PICCOLO2012. 1. 20. 00:53

[TMS320F280xx-SS EVM] Picoolo 시리즈 TMS320F28027 초소형 보드 제작

[TMS320F280xx-SS EVM] Picoolo 시리즈 TMS320F28027 초소형 보드 제작



TMS320F2802x 예제 소스코드

C2000_LaunchPad.zip



TI사의 저가형 DSP인 Piccolo 시리즈중 크기가 가장 작은 TSSOP타입의 TMS28027을  s-Type 형태로 제작하여 표준화 해서 제작 하였다. 저렴하고 소형이며 기능이 뛰어 나기 때문에 적용해 볼곳이 많을 것 같다.






표준형태로 제작되어 기존 확장 테스트 보드에 쉽게 연결하여 테스트 가능하다.





[DSP-EXP] 확장 테스트 보드 연결






TMS320F28027 EVM보드 회로도

TMS320F28027-SS_SCH.pdf








Posted by nexp

댓글을 달아 주세요

[DSP]/PICCOLO2011. 11. 25. 23:00

[TMS320F28027 EVM] eCAP 테스트 - 펄스폭 측정

[TMS320F28027 EVM] eCAP 테스트 - 펄스폭 측정



C28xx 시리즈(TMS320F2808, TMS320F28027, TMS320F28335.. 등)는 eCAP(Enhanced Capture) 모듈이 있어 입력 신호의 펄스폭을 정밀하게, 그리고 쉽게 측정 할수 있다.

TMS210F28027에는 한포트의 eCAP핀이 있고 아래와 같다. GPIO5, GPIO19 중 하나를 선택해서 설정가능하다.)
GPIO5/EPWM3B/ECAP1
GPIO19/XCLKIN/ /SCIRXDA/ECAP1SPISTEA


eCAP의 Capture모드 구조는 아래와 같고 4개의 32비트 캡쳐 레지스터로 이벤트(폴링, 라이징 에지)의 시간을 캡쳐 할 수 있다.





좀더 자세하게 들여다 보면 아래 구조와 같고 입력신호의 분주도 가능하다.








eCAP Delta Mode 예제 - 펄스폭 측정



초기화 코드
// Code snippet for CAP mode Delta Time, Rising and Falling edge triggers
//=======================
// ECAP 초기화
 ECap1Regs.ECEINT.all = 0x0000;             // Disable all capture interrupts
 ECap1Regs.ECCLR.all = 0xFFFF;              // Clear all CAP interrupt flags
 ECap1Regs.ECCTL1.bit.CAPLDEN = 0;          // Disable CAP1-CAP4 register loads
 ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0;        // Make sure the counter is stopped

ECap1Regs.ECCTL1.bit.CAP1POL = EC_RISING;
ECap1Regs.ECCTL1.bit.CAP2POL = EC_FALLING;
ECap1Regs.ECCTL1.bit.CAP3POL = EC_RISING;
ECap1Regs.ECCTL1.bit.CAP4POL = EC_FALLING;

ECap1Regs.ECCTL1.bit.CTRRST1 = EC_DELTA_MODE;
ECap1Regs.ECCTL1.bit.CTRRST2 = EC_DELTA_MODE;
ECap1Regs.ECCTL1.bit.CTRRST3 = EC_DELTA_MODE;
ECap1Regs.ECCTL1.bit.CTRRST4 = EC_DELTA_MODE;

ECap1Regs.ECCTL1.bit.CAPLDEN = EC_ENABLE;
ECap1Regs.ECCTL1.bit.PRESCALE = EC_DIV1;
ECap1Regs.ECCTL2.bit.CAP_APWM = EC_CAP_MODE;
ECap1Regs.ECCTL2.bit.CONT_ONESHT = EC_CONTINUOUS;
ECap1Regs.ECCTL2.bit.SYNCO_SEL = EC_SYNCO_DIS;
ECap1Regs.ECCTL2.bit.SYNCI_EN = EC_DISABLE;
 ECap1Regs.ECCTL2.bit.TSCTRSTOP = EC_RUN; // Allow TSCTR to run 



// Run Time ( e.g. CEVT1 triggered ISR call)
//==========================================
// Note: here Time-stamp directly represents the Duty cycle values.
DutyOnTime1 = ECap1Regs.CAP2; // Fetch Time-Stamp captured at T2
DutyOffTime1= ECap1Regs.CAP3; // Fetch Time-Stamp captured at T3
DutyOnTime2 = ECap1Regs.CAP4; // Fetch Time-Stamp captured at T4
DutyOffTime2 = ECap1Regs.CAP1; // Fetch Time-Stamp captured at T1

Period1 =DutyOnTime1 + DutyOffTime1;
Period2 = DutyOnTime2 + DutyOffTime2;





절대 시간 측정 예제




// Code snippet for CAP mode Absolute Time, Rising edge trigger
// Initialization Time
//=======================
// ECAP module 1 config
ECap1Regs.ECCTL1.bit.CAP1POL = EC_RISING;
ECap1Regs.ECCTL1.bit.CAP2POL = EC_FALLING;
ECap1Regs.ECCTL1.bit.CAP3POL = EC_RISING;
ECap1Regs.ECCTL1.bit.CAP4POL = EC_FALLING;

ECap1Regs.ECCTL1.bit.CTRRST1 = EC_ABS_MODE;
ECap1Regs.ECCTL1.bit.CTRRST2 = EC_ABS_MODE;
ECap1Regs.ECCTL1.bit.CTRRST3 = EC_ABS_MODE;
ECap1Regs.ECCTL1.bit.CTRRST4 = EC_ABS_MODE;

ECap1Regs.ECCTL1.bit.CAPLDEN = EC_ENABLE;
ECap1Regs.ECCTL1.bit.PRESCALE = EC_DIV1;
ECap1Regs.ECCTL2.bit.CAP_APWM = EC_CAP_MODE;
ECap1Regs.ECCTL2.bit.CONT_ONESHT = EC_CONTINUOUS;
ECap1Regs.ECCTL2.bit.SYNCO_SEL = EC_SYNCO_DIS;
ECap1Regs.ECCTL2.bit.SYNCI_EN = EC_DISABLE;
ECap1Regs.ECCTL2.bit.TSCTRSTOP = EC_RUN; // Allow TSCTR to run



// Run Time ( e.g. CEVT4 triggered ISR call)
//==========================================
TSt1 = ECap1Regs.CAP1; // Fetch Time-Stamp captured at t1
TSt2 = ECap1Regs.CAP2; // Fetch Time-Stamp captured at t2
TSt3 = ECap1Regs.CAP3; // Fetch Time-Stamp captured at t3
TSt4 = ECap1Regs.CAP4; // Fetch Time-Stamp captured at t4

Period1 = TSt2-TSt1; // Calculate 1st period
Period2 = TSt3-TSt2; // Calculate 2nd period
Period3 = TSt4-TSt3; // Calculate 3rd period



TMS320F28027 eCAP 테스트 결과
TMS320F28027의 eCAP 모듈을 테스트 하기 위해 LED2(GPIO1)을 타이머를 이용하여 일정 주기로 펄스를 출력하고 그 주기를 측정하여 LCD에 출력하는 예제로 작성해 보았다. 출력은  [Serial LCD Module] 를 이용하여 시리얼  출력으로 표시 할 수 있도록 했다.





TMS320F28027 eCAP테스트 예제 소스 코드
void main(void)
{
 unsigned int cnt = 0;

 //DSP System Initialize
 SystemInit();

 DebugInit(BAUD_9600);
 DebugPrint("280x eCAP Test\r");

 //LED Initialize
 Led1Init();
 Led1Off();

 Led2Init();
 Led2Off();

 //eCAP초기화
 InitECapture();

 //타이 인터럽트 초기화
 Timer0Init();

 // Enable global Interrupts
 enalbe()

 while(1)
 {
  DebugPrint("D=%ldus\r", DutyOnTime1/TIME_TICK_PERIOD); 
  Delay(30);
 }
}  


//eCAP Interrupt handler
interrupt void ecap1_isr(void)
{
 Led1Toggle();

 DutyOnTime1 = ECap1Regs.CAP2; // Fetch Time-Stamp captured at T2
 DutyOffTime1= ECap1Regs.CAP3; // Fetch Time-Stamp captured at T3
 DutyOnTime2 = ECap1Regs.CAP4; // Fetch Time-Stamp captured at T4
 DutyOffTime2 = ECap1Regs.CAP1; // Fetch Time-Stamp captured at T1 

 Period1 =DutyOnTime1 + DutyOffTime1;
 Period2 = DutyOnTime2 + DutyOffTime2;

 ECap1Regs.ECCLR.bit.CEVT4 = 1;
 ECap1Regs.ECCLR.bit.INT = 1;
 ECap1Regs.ECCTL2.bit.REARM = 1;

 // Acknowledge this interrupt to receive more interrupts from group 4
 PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;
}


UART출력
280x eCAP Test
DutyOnTime(9000) = 150.0us
DutyOnTime(9000) = 150.0us
DutyOnTime(9000) = 150.0us
DutyOnTime(9000) = 150.0us
DutyOnTime(9000) = 150.0us


Posted by nexp

댓글을 달아 주세요

[DSP]/PICCOLO2011. 10. 27. 01:03

[TMS320F28069 EVM] PICCOLO 시리즈 TFT-LCD테스트 - LCD_PLD_IF Board

[TMS320F28069 EVM] PICCOLO 시리즈 TFT-LCD테스트 - LCD_PLD_IF Board



다른건 다 좋은것 같은데 SPI클럭 속도가 좀 문제 인것 같다. 최대가 5Mhz정도라 ... SD Card 읽어오는데 속도가 느리게 느껴진다.


TMS320F28069 EVM TFT LCD 테스트 동영상
SD Card의 BMP이미지 파일을 읽어서 표시하는 테스트
Posted by nexp

댓글을 달아 주세요

[DSP]/PICCOLO2011. 9. 8. 23:32

[TMS320F28027] Piccolo 시리즈 PWM테스트

[TMS320F28027] Piccolo 시리즈 PWM테스트


TI의 Piccolo 시리즈중 저렴한 TMS320F28027은 8채널의 ePWM(enhanced PWM Modules)이 있다.
GPIO0/EPWM1A
GPIO1/EPWM1B/COMP1OUT
GPIO2/EPWM2A
GPIO3/EPWM2B/COMP2OUT
GPIO4/EPWM3A
GPIO5/EPWM3B/ECAP1
GPIO6/EPWM4A/EPWMSYNCI/EPWMSYNCO
GPIO7/EPWM4B/SCIRXDA


테스트를 위해 EPWM1에 연결하여 간단히 LED램프제어 하는 예제를 테스트 해 보았다.






TMS320F28027 ePWM테스트 동영상





TMS320F28027 ePWM 제어 드라이버 코드


void SetPwm1Period(unsigned int Frequency, unsigned int Period)
{
    EPwm1Regs.TBPRD = Frequency;
    EPwm1Regs.CMPA.half.CMPA = Frequency-(Frequency*(Period/100.0));
}

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

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

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

   // Setup compare
   EPwm1Regs.CMPA.half.CMPA = period / 2;
  
   // Set actions
   EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;             // Set PWM1A on Zero
   EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;
  
   EPwm1Regs.AQCTLB.bit.CAU = AQ_CLEAR;          // Set PWM1A on Zero
   EPwm1Regs.AQCTLB.bit.CAD = AQ_SET;
  
   // Active Low PWMs - Setup Deadband
   EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
   EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_LO;
   EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL;
   EPwm1Regs.DBRED = 10;
   EPwm1Regs.DBFED = 10;
  
  
   EALLOW;
  
    GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;    // Enable pull-up on GPIO0 (EPWM1A)
    GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0;    // Enable pull-up on GPIO1 (EPWM1B)  
  
    GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;   // Configure GPIO0 as EPWM1A
    GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1;   // Configure GPIO1 as EPWM1B
  
    EDIS;
}




TMS320F28027 ePWM 예제 소스코드

void main(void)
{
 unsigned int cnt = 0;
 int flag = 0;

//DSP System Initialize
 SystemInit();

 DebugInit(BAUD_115200);
 DebugPrint("LED Test\r\n");

 //LED Initialize
 Led1Init();
 Led1On();

 InitPwm();
 SetPwm1Period(PWM_10KHZ, 50);

 while(1)
 {
  if(flag)cnt--;
  else cnt++;

  if(cnt==100)flag = 1;
  else if(cnt == 0)flag=0;

  SetPwm1Period(PWM_100HZ, cnt);
  Delay(cnt/2);
 }
}  




Posted by nexp

댓글을 달아 주세요

[DSP]/PICCOLO2011. 5. 14. 17:36

[TMS320F20827 EVM] TI DSP CCS4 Debug 환경 설정

[TMS320F20827 EVM] TI DSP CCS4 Debug 환경 설정

먼저 "Target Configurations"메뉴를 활성화 해서 해당 JTAG 설정이 필요하다.



"Target Configurations"메뉴가 활성화 되면 새로운 설정을 생성한다. 물론 기존 환경 설정을 이용해도 된다.



사용할 JTAG툴과 칩을 선택한다. 여기서는 간단히 F28027 을 선택 했다.
Advenced 탭에서 GEL파일이나 좀더 세세한 설정을 할 수 있지만 최신 CCS4라면 그냥 기본으로 설정해도 문제 없다.



설정이 완료 되었다면 Launch 하면 기본 환경이 셋업 되고 디버깅 모드로 전환된다.



Connection 하면 실제 보드와 연결이 된다



기본 메모리가 잡히고, 리셋번지로 브레크 포인터가 지시되는것을 확인 할 수 있다.


이후 디버깅이나 out파일을 로드해서 테스트 하면 쉽게 디버깅 가능하다.
Posted by nexp

댓글을 달아 주세요

  1. Logo Design

    관리자의 승인을 기다리고 있는 댓글입니다

    2011.07.13 20:46 [ ADDR : EDIT/ DEL : REPLY ]