TMS320F 28027 의 중단

인 터 럽 트
참고 문서 SPRUFN3C
외부 인 터 럽 트 설명도:
 
외부 레벨:
       외부 장치 가 중단 되면 특정한 외부 장치 레지스터 에 해당 하 는 중단 표지 위치 (IF) 가 설 치 됩 니 다.해당 인 터 럽 트 가 에너지 위 치 를 설정 하면 외부 장치 가 PIE 컨트롤 러 에 인 터 럽 트 요청 을 합 니 다.외부 장치 에서 중단 되 어 사용 할 수 없 으 면 IF 위 치 는 소프트웨어 가 지 워 질 때 까지 1 상 태 를 유지 합 니 다.인 터 럽 트 후에 도 IF 비트 가 1 이면 인 터 럽 트 요청 은 PIE 에 응답 합 니 다.
       외부 레지스터 의 인 터 럽 트 플래그 는 수 동 으로 제거 되 어야 합 니 다.
 
PIE 레벨:
       PIE 는 8 개의 외부 장치 와 외부 인 터 럽 트 다 중 채널 을 하나의 CPU 인 터 럽 트 로 재 활용 합 니 다.이 중단 은 12 조로 나 뉜 다.같은 그룹의 인 터 럽 트 는 CPU 인 터 럽 트 를 다시 사용 합 니 다.예 를 들 어 PIE 그룹 1 재 활용 CPU 인 터 럽 트 1 (INT 1), PIE 그룹 12 재 활용 CPU 인 터 럽 트 12 (INT 12).CPU 에 연 결 된 나머지 인 터 럽 트 된 인 터 럽 트 원본 은 재 활용 되 지 않 았 으 며 PIE 는 요청 을 CPU 에 직접 전달 합 니 다.
재 활용 인 터 럽 트 소스 에 대해 서 는 인 터 럽 트 그룹의 PIE 블록 마다 해당 하 는 플래그 레지스터 (PIEIFRx) 와 레지스터 (PIEIERx) (X = PIE 그룹 1 - PIE 그룹 12) 가 있 습 니 다.그룹 내 각 자 리 를 y 라 고 하 는데 하나의 8 번 재 활용 중단 에 대응 하기 때문에 PIEIFRx. y 와 PIEIERx. y (y = 1 - 8) 는 PIE 그룹 X (X = 1 - 12316) 를 중단 하 는 것 에 대응 합 니 다.또 PIE 인 터 럽 트 팀 마다 인 터 럽 트 승낙 자리 가 하나씩 있다.
PIE 컨트롤 러 에 요청 이 있 으 면 해당 PIE 인 터 럽 트 로고 (PIEIFRx. y) 가 1 로 설 치 됩 니 다. PIE 인 터 럽 트 로 비트 (PIEIERx. y) 가 설정 되면 PIE 컨트롤 러 는 해당 PIEACKx 위 치 를 확인 하고 CPU 가 인 터 럽 트 를 위해 준비 되 어 있 는 지 확인 합 니 다.PIEACKx 비트 가 삭제 되면 PIE 는 CPU 에 중단 요청 을 보 냅 니 다.PIEACKx 비트 가 설정 되 어 있 으 면 PIE 가 지우 지 않 을 때 까지 기 다 렸 다가 INtx 요청 을 보 냅 니 다.
 
CPU 레벨:
       CPU 로 요청 이 전송 되면 CPU 급 에 해당 하 는 INTX 의 인 터 럽 트 플래그 비트 (IFR) 가 설 치 됩 니 다. IFR 의 플래그 가 설정 되면 해당 인 터 럽 트 는 서비스 되 지 않 습 니 다. 그러나 CPU 의 인 터 럽 트 를 설정 하여 레지스터 (IER) 나 디 버 깅 인 터 럽 트 를 설정 하여 레지스터 (DBGIER) 와 전역 인 터 럽 트 차단 비트 (INTM) 를 설정 합 니 다.
 
 
 
 
외부 인 터 럽 트 설정 단계:
1.     인 터 럽 트 서비스 함수 작성
2.     인 터 럽 트 서비스 함수 주 소 를 할당 하 는 인 터 럽 트 벡터 시트 입 니 다.
3.     당 김 저항 (GPxPUD) 을 제거 하거나 제거 할 수 있 습 니 다.
ePWM 모드 는 기본적으로 에 너 지 를 제거 하고 다른 기능 은 기본적으로 에 너 지 를 사용 합 니 다.아 날로 그 IO 에 당 김 저항 이 없습니다.
4.     핀 기능 (GPxMUXn) 을 선택 하 십시오.
5.     숫자 IO 라면 방향 (GPxdir) 을 선택 하 세 요.
6.     샘플링 설정 (GPxCTRL, GPxQSELn) 을 입력 하 십시오.
7.     해당 GPIO 를 XINTn (n = 1 - 3) 인 터 럽 트 소스 GPIOxINtnSEL 로 합 니 다.
8.     낮은 전력 소모 모드 에서 깨 우기 입력 핀 (GPIOLPMSEL) 을 선택 하 십시오.
9.     트리거 방식 (xINtnCR) 을 설정 합 니 다.
10.  XINTn 을 중단 시 킵 니 다.(xINTnCR)
11.  PIE 를 사용 하 다.(PIECTRL)
12.  PIE 에서 이 인 터 럽 트 를 할 수 있 습 니 다.(PIEIERn)
13.  IER 에서 이 그룹의 중단 (CPU 급 사용) 을 할 수 있 습 니 다.
14.  총 중단 사 능.
15.  인 터 럽 트 서비스 함수 에서 인 터 럽 트 응답 위 치 를 지 워 야 합 니 다.
 
 
프로그램 설계:
       GPIO 12 키 를 누 르 면 외부 인 터 럽 트 를 실행 하고 인 터 럽 트 서비스 함수 에서 IO 를 뒤 집 습 니 다.
 
 프로그램:
  :

/*********************************************

     :INT_test.c

       :CCS v5.2

       :C2000 LaunchPad

     :60M

 

        :     ,    

 

        2802x C/C++ Header Files V1.26

 

 

   author:  

   data:2012-09-25

 

   As supplied, this project is configured for "boot to SARAM"

   operation.  The 2802x Boot Modetable is shown below.

 

   $Boot_Table

   While an emulator is connected to your device, the TRSTn pin = 1,

   which sets the device into EMU_BOOT boot mode. In this mode, the

   peripheral boot modes are as follows:

 

      Boot Mode:   EMU_KEY        EMU_BMODE

                   (0xD00)       (0xD01)

      ---------------------------------------

      Wait      !=0x55AA           X

      I/O          0x55AA            0x0000

      SCI          0x55AA            0x0001

      Wait        0x55AA            0x0002

      Get_Mode     0x55AA            0x0003

      SPI          0x55AA            0x0004

      I2C          0x55AA            0x0005

      OTP          0x55AA            0x0006

      Wait         0x55AA            0x0007

      Wait         0x55AA            0x0008

      SARAM        0x55AA            0x000A    <-- "Boot to SARAM"

      Flash        0x55AA            0x000B

      Wait         0x55AA            Other

 

  Write EMU_KEY to 0xD00 and EMU_BMODE to 0xD01 via the debugger

  according to the Boot Mode Table above. Build/Load project,

  Reset the device, and Run example

 

  $End_Boot_Table

**********************************************/

#include"DSP28x_Project.h"     // Device Headerfile and Examples Include File

#include"LEDs.h"

 

interruptvoidKey_On(void);

 

void main(void)

{

 

// Step 1. Initialize SystemControl:

// PLL, WatchDog, enablePeripheral Clocks

// This example function is foundin the DSP2802x_SysCtrl.c file.

  InitSysCtrl();

 

// Step 2. Initalize GPIO:

// This example function is foundin the DSP2802x_Gpio.c file and

// illustrates how to set the GPIOto it's default state.

// InitGpio();  // Skipped for this example

 

 

// Step 3. Clear all interruptsand initialize PIE vector table:

// Disable CPU interrupts

  DINT;

 

// Initialize PIE controlregisters to their default state.

// The default state is all PIEinterrupts disabled and flags

// are cleared.

// This function is found in theDSP2802x_PieCtrl.c file.

  InitPieCtrl();

 

// Disable CPU interrupts andclear all CPU interrupt flags:

  IER = 0x0000;

  IFR = 0x0000;

 

// Initialize the PIE vector tablewith pointers to the shell Interrupt

// Service Routines (ISR).

// This will populate the entiretable, even if the interrupt

// is not used in thisexample.  This is useful for debugpurposes.

// The shell ISR routines arefound in DSP2802x_DefaultIsr.c.

// This function is found inDSP2802x_PieVect.c.

  InitPieVectTable();

 

 

// Step 4. Initialize all theDevice Peripherals:

// This function is found inDSP2802x_InitPeripherals.c

// InitPeripherals(); // Notrequired for this example

 

// Step 5. User specific code:

 

  EALLOW;

 

  PieVectTable.XINT1= &Key_On;

 

  GpioCtrlRegs.GPAPUD.bit.GPIO12 = 0; //      

  GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 0;  //GPIO12

  GpioCtrlRegs.GPADIR.bit.GPIO12 = 0;   //  

  GpioCtrlRegs.GPAQSEL1.bit.GPIO12 = 2; // 6 samples

  GpioCtrlRegs.GPACTRL.bit.QUALPRD1 = 0xff;//     510*Tsysclk,     5*510*Tsysclk=2550/60M=42.5us

 

  GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 12; //GPIO12  xint1    

 

  EDIS;

 

  XIntruptRegs.XINT1CR.bit.POLARITY = 1;    //       

  XIntruptRegs.XINT1CR.bit.ENABLE = 1;      //   1  

 

  EALLOW;

  PieCtrlRegs.PIECTRL.bit.ENPIE = 1;  //  PIE

  PieCtrlRegs.PIEIER1.bit.INTx4 = 1;  //  int1.4

 

  IER |= 0x0001;//  int1

  EINT;

  EDIS;

 

  LEDs_init();

  while(1)

  {

  };

}

 

interruptvoidKey_On(void)

{

    LED_toggle(LED0);

    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;

}

 

//=========================================================================

// No more.

//=========================================================================

 

좋은 웹페이지 즐겨찾기