发 帖  
原厂入驻New
申请华秋企业认证 多层板首单免费打样!
30s提交资料,10分钟通过审核(免费赔付+顺丰包邮)>>立即报名
[问答] pic32MZ SPI时钟不起作用
120 SPI 转换器
分享
大家好,我用的是PI32MZ,它连接到带有SPI接口的LTC1864ADC转换器。我检查了我的SCKL引脚,但没有脉冲。似乎spi不是活动的.任何想法都会被理解.int main(void){CFGCONbits.JTAGEN=0;TRISA=0xC000TRISA=0xC000TRISB=0;TRISA=TRISA=0;TRISA=TRISA=0xC000TRISB=0;TRISC=TRISB=0;TRISA=TRISC 0;TRISC=0;TRISC 0;TRISC=0;TRISC 0;TRISC 0;TRISC=0;TRISC 0;TRISC=0;TRISC=0;TRISC 0;TRISC 0;TRISC 0;TRISC 0;TRISC 0/PMRDTRITRITRISC比特TRITRITRITRITRITRITRISC比特TRITRITRITRITRITRITRITRITRITRISC比特TRITRITRITRITRITRISC比特TRITRISC14=0;TRISC13=0;//sosciTRISGbits.TRISGbits.TRISG0=1;//sdi4TRITRISB比特.TRIsb1=1;//sdi4TRITRITRISB比特.TRISB1=1=0;//sdi4TRISD14141414TRISD比特.TRISD10=0;//ck4CNPUDCDCDCDCDCDCDCDCDCD钻比特.CNPUD0=0;//sckkk4CNPUD位CNPUD位.CNPUD位.CNPUD10=0,//0=0=0=0=0=上拉式禁用CNPUBBB位被上拉禁用CNPUBCNPUG比特.CNPUB1=0=0;//0=//0=上拉ANSELC=0X0000;ANSANSELF=0X0000;ANSELF=0X0000;ANSELF=0X0000;ANSELG=0X0000;ANSELG=0X0000;CFGCON比特.IOLOCK=0;CFGCON比特.CFGCON比特.IOLOCK=0;CFGCON比特.PMDLOCK=0;CFGCON比特.PGLOCK=0;CFGCON比特.PGLOCK=0;CFGCON比特.PGLOCK=0;SDI4R=0;SDI4R=0b1100;//RG0;SDI4R=000b1100;//RG0,SDI4_asm_asm_uu_asm_us.SPI4EIE=0;//禁用所有中断IEC5bit。SPI4TXIE=0;//di所有可中断SPI4CON=0;//停止并重置SPI1.rData=SPI4BUF;//停止并重置SPI1.rData=SPI4BUF;//清除接收缓冲区IFS5bits接收缓冲区IFS5bits接收缓冲区IFS5bitsSPI4RXIF=0;//清除任何现有的eventiPC4141比特.SPI41bits.SPI4RXIP=0;//清除优先级IPC41bits.SPI4RXIP.SPI4RXIP=0;//清除优先级IPC41bits优先级IPC41bits优先级IPC41bitsSPI4RXIP=3.SPI4RXIP=3;///优先级IPC41IPC41404040404040404040404041bitsIPC41bitsIPC41能干的RX,TX和错误中断SPI4BRG=0x1;//使用FPB/4时钟频率SPI4STAT位.SPIROV=0;//清除溢出SPI4CON=0x0000D620;//SPI开启,清除溢出SPI4CON=0x0000D620;//SPI开启,禁用sdo pin,16位传输,主控PBCLK2,Mssen禁用///u asm_u volatil("ei");(1){LATBbit.LATB1=1;//APP_StartCoreTimer(0);//APP_CoreTimer_Del延迟(300);延迟(18);LATB位.LATB位.LATB1=0;//LATB1=0;//同时(计数< 16计数;16);int数据;//读取SPI数据缓冲SPI数据缓冲器数据=SPI数据缓冲器数据=SPI4BUUF;}}void_u.u.((中断(ipl3SRS),矢量(_SPI4_SPI4_RX_VECTOR))(矢量(_SPI4_SPI4_RX_RX_RX_VECTOR))))(矢量((_SPI4_SPI4_SPI4_RX_RX_RX_/使用在此接收的数据NT数据;//Read SPI数据BuffelDATa= SPI4BUF;/ /清除RX中断FraveS5BITS;SPI4RXIF=0;}
0
2019-10-22 06:19:19   评论 分享淘帖 邀请回答

相关问题

19个回答
我看不出你寄什么东西了。用SPI,你必须发送来接收。
2019-10-22 06:37:49 评论

举报

因为我的ADC转换器没有输入引脚,所以我的主SDO引脚被禁用了。当禁用了SDO时,我如何发送任何数据?
2019-10-22 06:52:57 评论

举报

这是不必要的。你必须给SPIxBUF写SPI模块来生成时钟。
2019-10-22 07:07:04 评论

举报

哎呀,真的吗?这是一个好消息:…我会在星期一做我的工作
2019-10-22 07:20:44 评论

举报

真正地!每个SPI事务是同时发送和接收的,通过写入主机中的SSPBUF寄存器触发。这与您是否不想发送无关。
2019-10-22 07:34:21 评论

举报

德拉-西蒙基试图在SPI缓冲区之前写(1),它工作,但1次之后,它总是零。然后我试图写在缓冲区内(1),这样,它总是工作,但不管我的模拟输入的ADC转换器,我的意思是如果我禁用模拟输入,仍然是SDO引脚的ADC工作和不去ZiRO.在现实中SDO引脚的ADC应该转换我的模拟输入,如果输入是ZRIO它仍然有数据吗?
2019-10-22 07:46:44 评论

举报

对不起,很难听懂你的口头描述。请贴出你测试的实际代码,尤其是你说的“只工作一次”的版本。
2019-10-22 07:54:51 评论

举报

这是我的密码,时钟和接收中断工作ONCE:int main(void){CFGCONbits.JTAGEN=0;CFGCONbits.JTAGEN=0;TRISA=0xC000;TRISB=0;TRISA=0xC000TRISB=0;TRISC=0x0010;TRISC=0x0010;TRISD=0x0010;TRISD=0x2001;TRISE=0x0000;TRISE=0x0000;TRISF=0x0104;TRISF=0x0104;TRISG=0X0001;TRISG=0X0001;TRISG=0X0001;TRISG=0X0001;TRISGbits.TRISGbits.TRISG=1;TRI=0;//sck4 CNPUDCNPUD10=0;//0=上拉禁用CNPUBbits.CNPUB1=0;//0=上拉禁用CNPUGbits.CNPUG0=0;//0=0=0;//0=上拉禁用CNPUGGGGGGGGGG0=0;//0=上拉禁用ANSELA ANSELA=0X000LA=0X0000;ANSELB=0X0000=0X0000;ANSELC=0XLC=0X0000;ANSELD=0X0000=0X0000;ANSELE=0X0000=0X0000;ANSEL0=0X0000=0X0000=0X0000;ANSELF=0X0000=0XCFGCON bits.PMDLOCK=0;CFGCONPGLOCK=0;SDI4R=0b1100;//RG0,SDI4_u asm_u易挥发("di");///****************inispi.**************inispi spi标识符********int rData;IEC5bits.PGLOCK=0;//禁止所有中断IEC5bits IEC5bits.SPI4EIE=0;SPI4TXIE=0;//禁止所有中断0; //停止并重置SPI1.rData=SPI4BU///清除接收缓冲区IFS5bits.SPI4RXIF=0;///清除任何现有的事件IPC4141比特.SPI4RXIP=0;////清除优先级IPC41比特优先级IPC41比特.SPI4RXIP=3;//清除优先级IPC优先级IPC41比特.SPI4RXIP=3;//优先级IPC41比特优先级IPC41比特.SPI4RXIP=3;//优先级IPC41比特.SPI4RXIS=1;//次优先级IEC5比特.SPI4RXIE=1;SPI4RXIE=1;//EnablRX、TX和错误中断//启RX、TX和RX、TX和错误中断//启用RX、TX和错误中断//现有事件//IPC41BIT.SPI4TXIp=0;//清除优先级//IPC41BIT。/SPI4TXIp=3;/SPI4/TXIIS=1;//优先级/ /IEC5位。SPI4TXHY=1;//启用RX,TX和错误中断//ECEC5位。SPI4RXYE=1;//启用RX,TX和错误中断SPI4BRG= 0x1;/ /使用FPB/4时钟频率SPI4STATBITS。V=0;/ /清除过流SPI4CONTITE;MLKSEL=0;/从属模式SPI4CONTITE。SIDL=0;SMP4CONTITE。SMP4CONTITE;SPI4CONTITE。MODE16 16=1;/16位传输SPI4CONTITE。FLMNE=0;SPICONFF=0;SPI4CONDITS。DISSDO=1;/ /禁用SDO引脚SPI4CONTITY。=0;π=1;/SPI在SPI4BUF=“A”上;InCONTITES.MVEC=1;α(1){LATBIT.LATB1=1;DelayUS(10);LATBITS。LATB1=0;而(SPI4STATBES.SIPBF){LATABITS。LATA0= ~LATABITS。LATA0;}}}空格。(中断(IPL3SRS),向量(πSP44RxVeto)马斯森(r)()(NoMIPs16):SPI4RX中断(空隙){//与接收数据遗传= SPI4BUF工作;/ /清除RX中断标志SPI4STATBITS.SPIROV=0;IFS5BITS SPI4RXIF=0;}
2019-10-22 08:04:29 评论

举报

请重新阅读我的文章第6页。每一个传输都需要写一个SSPBUF。每次写入SSPBUF时,只传输8位。
2019-10-22 08:20:17 评论

举报

我也尝试每次写入缓冲区,这样时钟和中断总是工作,但我的ADC的SDO引脚总是有PURS(或数据)考虑到我的模拟输入,即使它是零。为什么?我只是把这个部分放在这里(1)其余的总是相同的:(1){ if(!)LIPB1=1;DelayUS(10);LATBITS。LATB1=0;而(SPI4STATBES.SIPBF){LATABITS。LATA0= ~LATABITS。LATA0;}}}空隙,γ属性((中断(IPL3SRS),矢量(πSP44RxVector)))数据= SPI4BUF;/ /清除RX中断标记SpIMP4STATBITS。SPROROV=0;IFS5BITS SPI4RXIF=0;}
2019-10-22 08:39:44 评论

举报

你看到的数据到底是什么?在systemNote中总会有一些噪声,您不能同时轮询SPIRBF并从中生成中断。如果启用了中断,那么在您的非中断代码能够看到标志之前,它们将读取数据(并清除标志)。
2019-10-22 08:47:51 评论

举报

抱歉,但是我不能撤消您的意思:注意,您不能同时轮询SPIRBF并从中生成中断。如果启用了中断,那么在您的非中断代码能够看到标志之前,它们将读取数据(并清除标志)。即使模拟输入不活跃,ADC的O引脚也是如此。
2019-10-22 09:03:16 评论

举报

但是在我前面提到的jut工作一次的代码中,SDO在我的模拟输入中是活动的,当在非活动的模拟输入中SDO也是零时,SDO也有数据
2019-10-22 09:17:40 评论

举报

很难理解你想用你的帖子告诉你什么,假设你的SDO是LTC1864 SDO引脚,而不是PICS SDO引脚。除了QHB的中断评论之外,你也开始读取ADC DATSIP4BUF=“A”;在你开始转换过程之前。如果LoBb1=1,则数据可以被移出,一旦CONV再次设置为0。由于循环,这仍然会给你一些数据,但不是你想要的样本,我猜。既然你现在要等待你的采样10,我们无论如何都是LabBIT。LATB1=1;DelayUS(10);LATBITS。LATB1=0;我看不到。一个真正的优点是使代码与中断复杂化。否则,你必须像QHB所说的那样重写。你很难得到一个精确的“0”的数字值,仅仅因为你把输入电压设置为零。最后对你的源代码进行一个注释,而这与你的问题无关(尽管它可能是一个症状):SPI4CONBITS。MSTN=1;// Sl。AAVE MODECCODE和注释相互矛盾。
2019-10-22 09:25:05 评论

举报

是的,我说的是SDO,但是您是说我必须这样做:SPI4BUF='A';//start.-->这是写在缓冲LATBbits中的。LATB1=1;delayus(10);LATBbits.LATB1=1;而不是LATBbits.LATB1=1;//startconvertiondelayus(10);LATBbits.LATB1=0;//complete.rsionv,然后开始输出数据????????
2019-10-22 09:35:43 评论

举报

我假设“平方”只是指“一些”脉冲?如果你看到一个精确的正方形脉冲,你很可能会看到错误的PIN。
2019-10-22 09:50:57 评论

举报

你的帖子{不,我不是那个意思。那是我自己写的一份草率的复制品。修正了我的帖子
2019-10-22 09:57:47 评论

举报

你能对我的代码做任何修改吗?我可以更不知道我的错误是什么????
2019-10-22 10:07:19 评论

举报

嗯,你有没有可能用你的文字“你能请……”改写你自己的帖子19吗?我已经看到你的新帖子没有打扰地包含代码,但是现在已经不见了。这是我对你的帖子的答复,它已经消失了……——你仍然在开始ADC之前开始阅读。你应该把这个后置LATBbits.LATB1=0;这是ADC可以给你提供数据的时间。否则对我来说这听起来不错。至少足够好,开始看你的16位“数据”变量,而不是SDO引脚。把不同的“已知的”(和允许的)电压加到ADC输入端(例如用电位计),测量电压,看看通过SPI读取的值是否至少某种程度上类似于模拟输入。如果是的话,你可以继续处理噪音。如果不是,您可能仍然存在代码的问题。
2019-10-22 10:25:48 评论

举报

只有小组成员才能发言,加入小组>>

64个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表