Dsp tms320f2812
This presentation is the property of its rightful owner.
Sponsored Links
1 / 31

DSP TMS320F2812 PowerPoint PPT Presentation


  • 336 Views
  • Uploaded on
  • Presentation posted in: General

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

Download Presentation

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Dsp tms320f2812

DSP TMS320F2812

ROBOTICS LAB.

http://cafe.naver.com/roboticslab


Contents

Contents

1. TMS320F2812 Interrupt

2. TMS320F2812 CPU Timer

3. TMS320F2812 GP Timer


Tms320f2812 interrupt

TMS320F2812 Interrupt

  • 인터럽트 구조


Tms320f2812 interrupt1

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


Tms320f2812 interrupt2

TMS320F2812 Interrupt

  • IFR & IER

Pending : IFR Bit = 1

Absent : IFR Bit = 0

Enable : IER Bit = 1

Disable : IER Bit = 0


Tms320f2812 interrupt3

TMS320F2812 Interrupt

  • INTM 스위치 조작법

    • INTM 스위치 : INTM = 0 일때, 스위치가 ON

      • Enable: INTM = 0

      • Disable: INTM = 1 (reset value)

    • INTM 비트 조작은 어셈블리로만 가능:

/*** 인라인 어셈블리를 이용한 조작법 ***/

asm(“ CLRC INTM”);//인터럽트 가동

asm(“ SETC INTM”);//인터럽트 해제


Tms320f2812 interrupt4

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


Tms320f2812 interrupt5

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


Tms320f2812 interrupt6

TMS320F2812 Interrupt

  • 확장된 인터럽트의 주변 회로 활당


Tms320f2812 interrupt7

TMS320F2812 Interrupt

  • 인터럽트 설정(개별 인터럽트 처리 과정)

PIE 회로

처리과정

CPU

처리과정


Tms320f2812 interrupt8

TMS320F2812 Interrupt

  • PIE 회로 관련 레지스터

PIEIFRx register

(x = 1 to 12)

PIEIERx register

(x = 1 to 12)

PIE Interrupt Acknowledge Register(PIEACK)

PIECTRL register


Tms320f2812 interrupt9

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)

{

int16i;

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;

}


Tms320f2812 interrupt10

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;

}


Tms320f2812 interrupt11

TMS320F2812 Interrupt

  • 인터럽트 레지스터


Tms320f2812 interrupt12

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++;

}


Tms320f2812 interrupt13

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;


Tms320f2812 interrupt14

TMS320F2812 Interrupt

  • 인터럽트 관련 코드

    • DefaultISR.h

      • Device.h에서 include

      • DefaultISR 함수 선언

    • PieCtrl.c

      • PIE 회로 초기화

      • PIE 회로 가동

    • PieVect.c

      • 벡터 레이블 선언

      • PIE 벡터 확장

    • Defaultisr.c

      • 테스트용 인터럽트 서비스 루틴


Tms320f2812 cpu timer

TMS320F2812 CPU Timer

  • CPU Timer

    • 총 3개의 Timer가 내장되어 있다.

      • Timer0, Timer1, Timer2

    • 모두 32Bit Timer로 Down-Counting방식

    • Timer1과 2는 Real Time OS(DSP/BIOS)를사용할 때, BIOS의 스케쥬링에 이용된다.


Tms320f2812 cpu timer1

TMS320F2812 CPU Timer

  • CPU Timer의 구조와 동작 원리


Tms320f2812 cpu timer2

TMS320F2812 CPU Timer

  • CPU Timer 관련 레지스터

Counter Register

Period Register


Tms320f2812 cpu timer3

TMS320F2812 CPU Timer

  • CPU Timer 관련 레지스터

Control Register


Tms320f2812 gp timer

TMS320F2812 GP Timer

  • Event Manager


Tms320f2812 gp timer1

TMS320F2812 GP Timer

  • Event Manager


Tms320f2812 gp timer2

TMS320F2812 GP Timer

  • GP Timer


Tms320f2812 gp timer3

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,)


Tms320f2812 gp timer4

TMS320F2812 GP Timer

  • GP Timer 관련 레지스터

EVA Interrupt Mask Register A (EVAIMRA)

EVA Interrupt Flag Register A (EVAIFRA)


Tms320f2812 gp timer5

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)


Dsp tms320f2812

실습(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초 간격으로 점멸


Dsp tms320f2812

실습(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초 간격으로 점멸


Dsp tms320f2812

Plan


Www themegallery com

Thank You !

www.themegallery.com


  • Login