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.
您好!
我正在使用 LAUNCHXL-F28027、我正在尝试将 SPIA 外设与 Raspberry Pi 搭配使用。 问题是、它永远不会进入传输器和接收器中断的回调。 实际上、它是第一次进入接收器中断、但 随后 RXFFIENA 寄存器变为高电平、从不变为低电平、因此我认为它是这个问题的关键之一。 如果有人知道问题可能是什么、我会非常感激。
这是代码。 main 只是对这些函数和 for (;;)的调用。
void SPIA_Init (void (* TX_int)(void)、void (* Rx_int)(unsigned char) ){ EALLOW; SpiaRegs.SPICCR.bit.SPISWRESET = 0;//复位条件 SpiaRegs.SPICCR.bit.CLKPOLARCRNT= 1;// SPICTR.SPICT.ST/ SPICT.STAL.SpiR/ SpiR/ SpiRIST.SpiRIST.SpiRIST.SpiRIST.SpiRIST.SpiRIST.SpiRIST.SpiRIST.SpiRIST.SpiRIST.SpiRIST.SpiRIST.SPICRINIT.SpiRINIT.SpiR=0;//配置为 SPICRIST.SPICRIST. //禁用发送路径 SpiaRegs.SPIFFTX.bit.SPIFFENA=1;// SPI_A FIFO 模式*// SpiaRegs.SPIFFTX.bit.TXFFIL = 0; SpiaRegs.SPIFFRX.bit.RXFFIL = 4; //将 RX FIFO 级别设置为0 SpiaRegs.SPIFFRX.bit.RXFFIENA=1; // SpiaRegs.SPIFFRX.bit.RXFFINTCLR = 1; // SpiaRegs.SPIPRI.All=0x0010; SPIA_Rx_callback = FIF_int;SPIA_TX_REACT.TXEST.1=SPIESCR.BIT.TX.BIT.R=1 ;SpiCR.BIT.TXESR=SPICESR=1;SpiCR.BIT.TX.BIT.TX.BIT.TX.BIT.TX.BIT.TX.BIT.R=SPICESR=1;SpiCR.BIT.TX.BIT.TX.BIT.BIT.BIT.R=SPICESR=SPIC EDIS; DINT; //启用 SCI 接收中断 Hwi_create (72、SPIARX_ISR、NULL、NULL);//在 PIE 组6 中启用 SPIRXINTA Hwi_create (73、SPIATX_ISR、NULL、NULL);//在 PIE 组6 EINT 中启用 SPIRXINTA; //在 CPU 级别 返回上启用中断; } void SPIARX_ISR (UARg arg) { RDATA[1]= SpiaRegs.SPIRXBUF;//从机读取数据 RDATA[2]= SpiaRegs.SPIRXBUF;//从机读取数据 RDATA[3]= SpiaRegs.SPIRXBUF] ;//从机读取数据 RDXBUF[SPIRF];//从机读取 数据 RDXBUF[SpiRXBUF] //从机读取数据 // if (SPIA_Rx_callback!= 0) // (* SPIA_Rx_callback)(RDATA[1]); //将数据发送到 sci_callback EALLOW 指向的函数; //SpiaRegs.SPIFFRX.bit.RXFFOVFCLR=1;//清除溢出标志 SpiaRegs.SPIFFRX.bit.RXFFINTCLR=1;//清除中断标志 // PieCtrlRegs.PIECR=0x20|;//清除中断标志 //发出 PIE ack EDIS; } void SPIATX_ISR (UArg_arg) { SpiaRegs.SPITXBUF = sdata[1];//从器件发送数据 SpiaRegs.SPIFFTX.bit.TXFFINTCLR=1;//清除中断标志 PieCtrlRegs.PIEACK.All|=0x20; //发出 PIE ACK //if (SPIA_TX_CALLBACK!= 0) //(* SPIA_TX_CALLBACK)(); //执行 sci_callback 指向的函数}
void initGPIO (void){ EALLOW; //rRaspberry (SPIA) // GpioCtrlRegs.GPAPUD.bit.GPIO16 = 0; // GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0; // GpioCtrlRegs.GPAPKA.bit.GPIO18 = 0; // GpioCtrl18 = 0;// GPIO18 = 0;// GPIO18 = GPIO18 = 0 * GpioCtrlRegs.GPAMUX2.bit.GPIO16=1;//SPISIMOA GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1;//SPISOMIA GpioCtrlRegs.GPAMUX2.bit.GPIO19=1;//SPISTE GCtrlRegs.GPAMUX2.bit.GPIO18 = 1;//SPICLK // GpioCtrlRegs.GPAQSEL2.bit.GPIO16 = 3; // GpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3; // GpioRegs.GPQ252.bit.GPIO=3.Gpio15.GQ2.GPIO2.GPIO=3.bit.GPIO3.GPIO=3/GPIO1.bit.GPIO1.bit.GPIO3.GPIO1.GPIO=2.Q251.bit.GPIO1.bit.GPIO3.GPIO1.bit.GPIO=2.GPIO1.GPIO1. //LED GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;//用作 GPIO GpioCtrlRegs.GPADIR.bit.GPIO0 = 1; //输出 //右侧电机 GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1; ///EPWM2A GpioCtrlRegs.GPAMUX1.bit.GPIO3=1; //EPWM2B GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 2;//EQEP2A GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 2;//EQEP2B //US 传感器-故障触发器和输出参数列表 GpioCtrlRegs.GPADIR.bit.GPIO4=1; //输出左侧 GpioCtrlRegs.GPAMUX1.bit.GPIO4=0; //向左触发 GpioCtrlRegs.GPAMUX1.bit.GPIO5=3; //ECAP1 -左侧 GpioCtrlRegs.GPAMUX1.bit.GPIO7=3; //ECAP2 -正面 GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 1;//ECAP3 -右侧 //模拟输入 GpioCtrlRegs.AIOMUX1.bit.AIO2 = 0;// ADCINA2 -左侧 GpioCtrlRegs.AIOMUX1.bit.AIO4 = 0;// ADCINA4 -正面 GpioCtrlRegs.AIOMUX1.bit.AIO6 = 0;// ADCINA6 -右 EDIS; } void initSystem (void){ EALLOW; //至少对于调试是必需的 SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; (*Device_cal)(); SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 0; //低速时钟配置 SysCtrlRegs.LOSPCP。all = 0b010; //除以4 //启用外设时钟 SysCtrlRegs.PCLKCR0.bit.SPIANCLK = 1; SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; SysCtrlRegs.PCLKCR0.bit.I2CAENCLK = 1; SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1; SysCtrlRegs.PCLKCR1.bit.EPWM2ENCLK = 1; SysCtrlRegs.PCLKCR1.bit.EPWM3ENCLK = 1; SysCtrlRegs.PCLKCR1.bit.EPWM4ENCLK = 1; SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK = 1; EDIS; }
您好!
这可能是一个问题、但也不起作用。 我 也取消了 GPAPUD 和 GPAQSEL2线路的注释、现在我在读取信息后复位接收 FIFO。 然后它就可以工作了。 我不知道原因、但 SPIA 没有减少接收器 FIFO 中的状态编号、因此我必须"手动"执行它。 它对我很有用。 我已将此代码传递给 F28069、因此无需进行此复位、因此我不知道。 但它终于成功了、谢谢您。
伊内斯