1 / 31

DSP TMS320F2812

DSP TMS320F2812. ROBOTICS LAB. http://cafe.naver.com/roboticslab. Contents. 1. TMS320F2812 Interrupt. 2. TMS320F2812 CPU Timer. 3. TMS320F2812 GP Timer. TMS320F2812 Interrupt. 인터럽트 구조. TMS320F2812 Interrupt. 마스크 인터럽트 처리 과정 해당 코어 인터럽트가 발생하면 , IFR 레지스터의 해당 비트가 1 로 SET

madler
Télécharger la présentation

DSP TMS320F2812

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. DSP TMS320F2812 ROBOTICS LAB. http://cafe.naver.com/roboticslab

  2. Contents 1. TMS320F2812 Interrupt 2. TMS320F2812 CPU Timer 3. TMS320F2812 GP Timer

  3. TMS320F2812 Interrupt • 인터럽트 구조

  4. TMS320F2812 Interrupt • 마스크 인터럽트 처리 과정 • 해당 코어 인터럽트가 발생하면, IFR 레지스터의 해당 비트가 1로 SET • IFR이 1로 Set된 비트 위치와 동일한 위치의 IER 비트가 1(on)로 되어 있고, INTM이 On 되어 있으면 C28x 코어는 인터럽트를 인식 코어 인터럽트 (IFR) “Latch” (IER) “스위치” (INTM) “주스위치” C28x Core /INT1 1 /INT2 0 /INT14 1

  5. TMS320F2812 Interrupt • IFR & IER Pending : IFR Bit = 1 Absent : IFR Bit = 0 Enable : IER Bit = 1 Disable : IER Bit = 0

  6. TMS320F2812 Interrupt • INTM 스위치 조작법 • INTM 스위치 : INTM = 0 일때, 스위치가 ON • Enable: INTM = 0 • Disable: INTM = 1 (reset value) • INTM 비트 조작은 어셈블리로만 가능: /*** 인라인 어셈블리를 이용한 조작법 ***/ asm(“ CLRC INTM”); //인터럽트 가동 asm(“ SETC INTM”); //인터럽트 해제

  7. TMS320F2812 Interrupt • 벡터 확장 영역 Default Vector Table Remapped when ENPIE = 1 Memory 0 0xD00 PIE Vectors 256 W 0x3FFFC0 BROM Vectors 64 W 0x3FFFFF File: PieVect.c Used to initialize PIE vectors

  8. TMS320F2812 Interrupt • 확장된 인터럽트의 처리 Interrupt Group1 INT1.1 1 INT1.2 1 /INT INT1.8 96 1 Peripheral Interrupts 12ⅹ8 = 96 28x Core Interrupt Logic /INT1 - /INT12 28x Core 12 Interrupts IFR IER INTM /INT13(TINT1 / XINT13) /INT14(TINT2) /NMI

  9. TMS320F2812 Interrupt • 확장된 인터럽트의 주변 회로 활당

  10. TMS320F2812 Interrupt • 인터럽트 설정(개별 인터럽트 처리 과정) PIE 회로 처리과정 CPU 처리과정

  11. TMS320F2812 Interrupt • PIE 회로 관련 레지스터 PIEIFRx register (x = 1 to 12) PIEIERx register (x = 1 to 12) PIE Interrupt Acknowledge Register(PIEACK) PIECTRL register

  12. TMS320F2812 Interrupt • PIE 벡터 확장 코드 – PieVect.c ※ 벡터 정의 부분 #include “DSP28_Device.h” const struct PIE_VECT_TABLE PieVectTableInit = { PIE_RESERVED, // Reserved space ~ ~ // Non-Peripheral Interrupts INT13_ISR, // XINT13 ~ // Group 1 PIE Vectors PDPINTA_ISR, // EV-A PDPINTB_ISR, // EV-B rsved_ISR, XINT1_ISR, XINT2_ISR, ADCINT_ISR, // ADC TINT0_ISR, // Timer 0 WAKEINT_ISR, // WD ~ ~ ~ ~ ~ ※ 벡터 정의 부분 void InitPieVectTable(void) { int16 i; Uint32 *Source = (void *)&PieVectTableInit; Uint32 *Dest = (void *)&PieVectTable; // DSP28_PieVect.h에 선언 EALLOW; for(i=0; i<128; i++) *Dest++ = * Source++; EDIS; // Enable the PIE Vector Table PiectrlRegs.PIECRTL.bit.ENPIE = 1; }

  13. TMS320F2812 Interrupt • PIE 회로 초기화 코드 – PieCtrl.c ※ 레지스터 초기화 void InitPieCtrl(void) { // Disable Interrupts at the CPU level: DINT; // Disable the PIE PieCtrlRegs.PIECRTL.bit.ENPIE = 0; // Clear all PIEIER registers: PieCtrlRegs.PIEIER1.all = 0; PieCtrlRegs.PIEIER2.all = 0; PieCtrlRegs.PIEIER3.all = 0; ~~ PieCtrlRegs.PIEIER10.all = 0; PieCtrlRegs.PIEIER11.all = 0; PieCtrlRegs.PIEIER12.all = 0; // Clear all PIEIFR registers: PieCtrlRegs.PIEIFR1.all = 0; PieCtrlRegs.PIEIFR2.all = 0; PieCtrlRegs.PIEIFR3.all = 0; ~~ PieCtrlRegs.PIEIFR10.all = 0; PieCtrlRegs.PIEIFR11.all = 0; PieCtrlRegs.PIEIFR12.all = 0; } ※ 인터럽트 가동 void EnableInterrupts() { // Enable the PIE PieCtrlRegs.PIECRTL.bit.ENPIE = 1; // Enables PIE to drive a pulse into the CPU PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable Interrupts at the CPU level EINT; }

  14. TMS320F2812 Interrupt • 인터럽트 레지스터

  15. TMS320F2812 Interrupt • Main()에서 인터럽트 설정 void main(void) { // Step 1. Initialize System Control: InitSysCtrl(); // Step 2. Initalize GPIO: // Step 3. Clear all interrupts and initialize PIE vector table: DINT; InitPieCtrl();: IER = 0x0000; IFR = 0x0000; InitPieVectTable(); EALLOW; PieVectTable.TINT0 = &cpu_timer0_isr; EDIS; // Step 4. Initialize all the Device Peripherals: InitCpuTimers(); ConfigCpuTimer(&CpuTimer0, 100, 1000000); StartCpuTimer0(); // Step 5. User specific code, enable interrupts: EALLOW; GpioMuxRegs.GPFMUX.bit.XF_GPIOF14 = 0; GpioMuxRegs.GPFDIR.bit.GPIOF14 = 1; EDIS; // Enable CPU INT1 which is connected to CPU-Timer 0: IER |= M_INT1; // Enable TINT0 in the PIE: Group 1 interrupt 7 PieCtrlRegs.PIEIER1.bit.INTx7 = 1; // Enable global Interrupts and higher priority real-time debug events: EINT; // Enable Global interrupt INTM ERTM; // Enable Global real time interrupt DBGM // Step 6. IDLE loop. Just sit and loop forever (optional): for(;;) backticker++; }

  16. TMS320F2812 Interrupt • 인터럽트 테스트-DefaultISR.c // ----------------------------------------------------------- // PIE Group 1 - MUXed into CPU INT1 // ----------------------------------------------------------- // INT1.1 interrupt void PDPINTA_ISR( void ) // EV-A { // Insert ISR Code here // To receive more interrupts from this PIE group, acknowledge this interrupt // PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code asm (" ESTOP0"); for(;;); } // INT1.2 interrupt void PDPINTB_ISR(void) // EV-B { // Insert ISR Code here // To receive more interrupts from this PIE group, acknowledge this interrupt // PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code asm (" ESTOP0"); for(;;); } // INT1.3 - Reserved // ----------------------------------------------------------- // PIE Group 2 - MUXed into CPU INT2 // ----------------------------------------------------------- // INT2.1 interrupt void CMP1INT_ISR(void) // EV-A { // Insert ISR Code here // To receive more interrupts from this PIE group, acknowledge this interrupt // PieCtrlRegs.PIEACK.all = PIEACK_GROUP2; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code asm (" ESTOP0"); for(;;); } ※ 인터럽트 설정 확인 용이 ※인터럽트 확인 후 벡터 리맵핑 작업 추천 EALLOW; PieVectTable.TINT0 = &cpu_timer0_isr; EDIS;

  17. TMS320F2812 Interrupt • 인터럽트 관련 코드 • DefaultISR.h • Device.h에서 include • DefaultISR 함수 선언 • PieCtrl.c • PIE 회로 초기화 • PIE 회로 가동 • PieVect.c • 벡터 레이블 선언 • PIE 벡터 확장 • Defaultisr.c • 테스트용 인터럽트 서비스 루틴

  18. TMS320F2812 CPU Timer • CPU Timer • 총 3개의 Timer가 내장되어 있다. • Timer0, Timer1, Timer2 • 모두 32Bit Timer로 Down-Counting방식 • Timer1과 2는 Real Time OS(DSP/BIOS)를사용할 때, BIOS의 스케쥬링에 이용된다.

  19. TMS320F2812 CPU Timer • CPU Timer의 구조와 동작 원리

  20. TMS320F2812 CPU Timer • CPU Timer 관련 레지스터 Counter Register Period Register

  21. TMS320F2812 CPU Timer • CPU Timer 관련 레지스터 Control Register

  22. TMS320F2812 GP Timer • Event Manager

  23. TMS320F2812 GP Timer • Event Manager

  24. TMS320F2812 GP Timer • GP Timer

  25. TMS320F2812 GP Timer • GP Timer 관련 레지스터 GP Timer Control Register A(GPTCONA) Timer x Period Register (TxPR, where x = 1, 2, 3, 4,) Timer x Compare Register (TxCMPR, where x = 1, 2, 3, 4,)

  26. TMS320F2812 GP Timer • GP Timer 관련 레지스터 EVA Interrupt Mask Register A (EVAIMRA) EVA Interrupt Flag Register A (EVAIFRA)

  27. TMS320F2812 GP Timer • GP Timer 관련 레지스터 Timer x Counter Register (TxCNT, where x = 1, 2, 3, or 4) Timer x Control Register (TxCON; x = 1, 2, 3, or 4)

  28. 실습(1) • CPU Timer를 이용한 LED 점멸 • 다음 프로젝트를 여시오. C:\tidcs\c28\dsp281x\v100\DSP281x_examples\ cpu_timer\Example_281xCpuTimer.pjt • LED 점멸 코드 구현 • 인터럽트 서비스에 다음을 구현하시오. • F14포트에 연결된 LED를 1초 간격으로 점멸 • G4포트에 연결된 LED를 10초 간격으로 점멸 • G5포트에 연결된 LED를 60초 간격으로 점멸

  29. 실습(2) • GP Timer를 이용한 LED 점멸 • 다음 프로젝트를 여시오. C:\tidcs\c28\dsp281x\v100\DSP281x_examples\ ev_timer_period\Example_281xEvTimerPeriod.pjt • LED 점멸 코드 구현 • 인터럽트 서비스에 다음을 구현하시오. • GP Timer1 인터럽트 서비스 루틴 : F14포트에 연결된 LED를 1초 간격으로 점멸 • GP Timer2 인터럽트 서비스 루틴 : G4포트에 연결된 LED를 10초 간격으로 점멸 • GP Timer3 인터럽트 서비스 루틴 : G5포트에 연결된 LED를 60초 간격으로 점멸

  30. Plan

  31. Thank You ! www.themegallery.com

More Related