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.
//=========================================================================
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Vector & Matrix스칼라 : 하나의 숫자로만 이루어진 데이터 (크기만 있고 방향이 없는 물리량) 벡터 : 여러 숫자로 이루어진 데이터 레코드. 매트릭스 : 벡터가 여럿인 데이터집합 벡터의 크기는 스칼라배를 통해 표현할 수 있다. *내...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.