请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28335工具/软件:
您好、
我编写了一个基本代码来切换 GPIO(本例中为 GPIO47)、并在每次 GPIO42 更改(用作触发器)时读取中断调用计数。 但是、当有触发信号时、GPIO47 和 COUNTER 变量都不会改变。 我已使用可用的 TI 示例进行了检查、使用了相同的代码、但错误仍然存在。
控制器:TMS320F28335
CCS 版本:12.8
请帮助解决此问题。
#include "DSP28x_Project.h"
// ISR Prototype
__interrupt void xint1_isr(void);
volatile Uint32 Xint1Count = 0;
void main(void)
{
// Step 1: Initialize System Control
InitSysCtrl();
// Step 2: Initialize GPIO
InitGpio();
// Configure GPIO42 as input (trigger source)
EALLOW;
GpioCtrlRegs.GPBMUX1.bit.GPIO42 = 0; // GPIO function
GpioCtrlRegs.GPBDIR.bit.GPIO42 = 0; // Input
GpioCtrlRegs.GPBQSEL1.bit.GPIO42 = 0; // Sync to SYSCLK
// Configure GPIO47 as output (toggle pin)
GpioCtrlRegs.GPBMUX1.bit.GPIO47 = 0; // GPIO function
GpioCtrlRegs.GPBDIR.bit.GPIO47 = 1; // Output
EDIS;
// Step 3: Configure External Interrupt XINT1
EALLOW;
GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 42; // Map GPIO42 -> XINT1
EDIS;
XIntruptRegs.XINT1CR.bit.POLARITY = 3; // 1 = Rising edge, 0 = Falling edge, 3 = Both edges
XIntruptRegs.XINT1CR.bit.ENABLE = 1; // Enable XINT1
// Step 4: Enable PIE & CPU Interrupts
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
PieVectTable.XINT1 = &xint1_isr; // Hook ISR
EDIS;
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable PIE
PieCtrlRegs.PIEIER1.bit.INTx4 = 1; // Enable XINT1 in PIE group 1
IER |= M_INT1; // Enable group 1 interrupts
EINT; // Enable Global INTM
ERTM; // Enable DBGM
// Step 5: Idle loop
for(;;)
{
asm(" NOP");
}
}
// Interrupt Service Routine for GPIO42 -> toggle GPIO47
__interrupt void xint1_isr(void)
{
// Toggle GPIO47
GpioDataRegs.GPBTOGGLE.bit.GPIO47 = 1;
Xint1Count++;
// Acknowledge interrupt to receive more
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
此致、
Priyadarshini N M