问答

汇集网友智慧,解决技术难题

嵌入式新手hhh

TA的家园币:16  

  • 求助各位大佬dspic33ev系列引脚映射SPI2存在问题

    本人使用DSPIC33ev128与AD7606进行通信的过程中使用默认的SPI1可以正确读取7606总线数据,现在改用可映射的SPI2就出现以下问题。问题1:片选信号在MISO的最后一个周期没有发完就拉高了,如下图所示问题2:示波器看有输出信号但是SPI2BUF一直为空,单片机没有收到,while(!SPI2STATbits.SPIRBF)这个判别条件始终无法为通过。问题3:单片机MOSI在发送两个字的数据,如0xff,示波器上显示输出只有一半,只有改为0xffff才显示完全希望各位大佬不吝赐教,非常感谢代码如下:voidSPI2_Init(void)//主模式{TRISCbits.TRISC8=0;//设置为输出SCKTRISCbits.TRISC2=1;//设置为输入MISOTRISCbits.TRISC6=0;//设置输出MOSIRPOR7bits.RP56R=0b001001;//配置RP35为SCK2引脚RC8RPINR22bits.SDI2R=0b0110010;//配置RPI34为MISO引脚RB2RPOR6bits.RP54R=0b001000;//配置RP54为MOSI引脚RCIFS2bits.SPI2IF=0;//清中断IEC2bits.SPI2IE=0;//中断禁止SPI2CON1bits.SPRE=0b001;SPI2CON1bits.PPRE=0b01;SPI2CON1bits.DISSCK=0;//使能内部SPI时钟SPI2CON1bits.DISSDO=0;//SDOx引脚由模块控制SPI2CON1bits.MODE16=1;//通信为字节宽(16位)SPI2CON1bits.SMP=0;//输入数据在数据输出时间末端采样SPI2CON1bits.CKE=0;//串行输出数据在时钟从工作状态转变为空闲状态时变化SPI2CON1bits.CKP=1;//空闲状态时钟信号为高电平;SPI2CON1bits.SSEN=0;//模块不使用SS引脚SPI2CON1bits.MSTEN=1;//主控模式SPI2CON2bits.SPIBEN=0;//传统模式SPI2STATbits.SPIEN=1;//使能模块并将SCKx、SDOx、SDIx和SSx配置为串口引脚SPI2BUF=0x0000;//写0IFS2bits.SPI2IF=0;//清中断IEC2bits.SPI2IE=1;//使能中断}unsignedintSPI2_ReadByte(unsignedintTxData){SPI2BUF=TxData;//while(!SPI2STATbits.SPIRBF);while(SPI2STATbits.SPITBF);returnSPI2BUF;}voidAD7606_ReadData(void){unsignedinti;AD_CS_L;for(i=0;i