This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好,
我目前正在与Delfino一起处理一个项目,在测试中断时遇到了问题。 我设置了代码。每次GPIO引脚17接收到高水平的方波输入时,GPIO引脚18 (输出)将从0切换为1。 下面是我的代码。 我还想知道我的函数生成器是否已正确设置用于此目的。 我有3.2 Vpp用于方波,1.5 V偏移量为30 us。 此外,输入前还有一个4.7K下拉电阻器。
#include <stdint.h> #include <stdbool.h> #include <stdio.h> #include <file.h> #include "F28x_Project.h" // DSP28x Headerfile #include "ti_ascii.h" #include "sci_io.h" //risy //#include "Device.h" //#include "F2837xD_examples.h" //#####################################################################################################################################################################################################################################################################################################28#28#28#28#28 //在main函数之前,项目中使用的全局变量。 宣布其他 //代码的此部分中的变量。 //################################################################### UINT16 *小工具包;//全局指针小工具包 UINT16位= 3;//test bit已随机初始化 UINT16 bit_done_flag = 0;//flag,表示中断已采用 //################################################ //声明服务例程和函数 //##################################################################################################### 中断void XINT1_ISR(void); //中断void CPU_timer0_ISR(void); //中断void isr1(void); // void program1(void); // void program2(void); //#################### 主代码###################的开头 //void main(void) void main() {// 初始化系统控制:// pll, watchdog,启用外设时钟 //此示例函数可在F2837xD_sysctrl.c文件中找到。 InitSysCtrl();// 清除所有中断并初始化PIE矢量表: //禁用CPU中断 dint; //将PIE控制寄存器初始化为其默认状态。 //默认状态是禁用所有PIE中断, 并清除标志//。 //此函数位于F2837xD_PIECTRL.c文件中。 InitPieCtrl();// 禁用CPU中断并清除所有CPU中断标志: IER = 0x0000; IFR = 0x0000; //使用指向shell Interrupt //服务例程(ISR)的指针初始化PIE矢量表。 //这将填充整个表,即使在此 示例中未使用中断//。 这对于调试非常有用。 // shell ISR例程位于F2837xD_DefaultIsr.C.中 //此函数位于F2837xD_PieVect.C.中 InitPieVectorTable(); //启用全局中断和更高优先级的实时调试事件: // EINT;//启用全局中断INTM //ERTM;//启用全局实时中断DBGM //################################################################### //用户特定代码:您的代码出现在此处。 //################################################################### EALLOW; PieVectorTable.XINT1_INT =&XINT1_ISR; EDIS; EALLOW; gpioCtrlRegs.GPAQSEL2.bit.GPIO17=1; gpioCtrlRegs.GPACTRL.bit.QUALPRD2 = 200; //输入 GpioCtrlRegs.GPAGMUX2.bit.GPIO17 = 0; GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 0; // GPIO 46 gpioCtrlRegs.GPADIR.bit.GPIO17 = 0; //输入 //GpioCtrlRegs.GPAINV.Bit.GPIO17 = 1; //输出探头 GpioCtrlRegs.GPAGMUX2.bit.GPIO18 = 0; GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 0; // GPIO 46 gpioCtrlRegs.GPADIR.bit.GPIO18 = 1; //输出 GpioDataRegs.GPASET.bit.GPIO18 = 0; GPIO_SetupXINT1Gpio(17); XintRegs.XINT1CR.bit.Polarity = 0; XintRegs.XINT1CR.bit.enable =1; PieCtrlRegs.PIECTRL.bit.ENPIE = 1; PieCtrlRegs.PIEIER1.bit.INTx4 = 1; IER |= M_INT1; EDIS; EINT; for(;){ DELAY _US(1); UINT16 A = GpioDataRegs.GPADAT.bit.GPIO18; } }//####################### 功能开始代码############## //####################### 中断服务例程############## //interrupt void XINT1_ISR(&*Kittens) //interrupt void XINT1_ISR() interrupt void XINT1_ISR(void) { EALLOW; *kittens =0; DELAY _US (100万); GpioDataRegs.GPATOGLE.bit.GPIO18 = 1; /*//while (!GpioDataRegs.GPBDAT.bit.GPIO46){/2/4 change while (!GpioDataRegs.GPBDAT.bit.GPIO46){ DELAY _US (1); 小猫++; */ EDIS; bit_done_flag=1;//查看是否触发中断的简单标志 PieCtrlRegs.PIEACK_ALL = PIEACK_Group1; }/*interrupt void CPU_timer0_ISR(void){ //CpuTimer0Regs.tcr.bit.trb = 1; GpioDataRegs.GPBSET.bit.GPIO41 = 1; //Delay_US (300万); DELAY _US (1); GpioDataRegs.GPBCLEAR.bit.GPIO41 = 1; PieCtrlRegs.PIEACG.ALL = PIEACK_GROUP1; //toggle } */