完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
配置了主机模式,并且bS0_DATA_DIR配置为1,在这样的配置下如何去读取从机设备的数据?
我测试的时候发现读回的数据会重复出现两次,代码如下: //读操作 CS2 = 0; CH559SPI0Write(0xff); //mDelaymS (10); dat = CH559SPI0Read(); //printf("recv[1]: %02xrn", (UINT16)dat); CS2 = 1; //初始化 void CH559SPI0Hostinit(void) { UINT8 i = 0; PORT_CFG &= ~bP1_OC; P1_DIR |= (bSCK | bMOSI | bSCS1 | bSCS2 | bSCS3 | bSCS4); //| bSCS); P1_IE |= bMISO; //引脚配置 SPI0_SETUP &= ~(bS0_MODE_SLV | bS0_BIT_ORDER); //设置为主机模式,字节顺序为大端模式 SPI0_CTRL |= bS0_MOSI_OE | bS0_SCK_OE | bS0_MST_CLK | bS0_DATA_DIR; //MISO输出使能,SCK输出使能 SPI0_CTRL &= ~(bS0_2_WIRE); //SPI0_CTRL &= ~(bS0_DATA_DIR); //主机写,默认不启动写传输,如果使能bS0_DATA_DIR, //那么发送数据后自动产生一个字节的时钟,用于快速数据收发 SET_SPI0_CK(6); //6分频 SPI0_CTRL &= ~bS0_CLR_ALL; //清空SPI0的FIFO,默认是1,必须置零才能发送数据 CS1 = 1; CS2 = 1; CS3 = 1; CS4 = 1; } //写函数 void CH559SPI0Write(UINT8 dat) { SPI0_DATA = dat; while(S0_FREE == 0); //等待传输完成 //printf("dat:%02Xrn", (UINT16)dat); //如果bS0_DATA_DIR为1,此处可以直接读取一个字节的数据用于快速读写 } //读函数 UINT8 CH559SPI0Read() { SPI0_DATA = 0xff; while(S0_FREE == 0); return SPI0_DATA; } |
|
相关推荐
1个回答
|
|
您好。当bS0_DATA_DIR配置为1,读DATA寄存器和写DATA寄存器均会产生一次SPI传输,因此上面会产生三次SPI传输。写传输之后的读回传的数据需要增加延时等待从机将数据准备好。
|
|
|
|
只有小组成员才能发言,加入小组>>
525 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2904 浏览 2 评论
2400 浏览 1 评论
872浏览 2评论
691浏览 1评论
riscv-none-embed-objcopy: \'PWM_Output.elf\': No such file这个咋解决,
420浏览 1评论
534浏览 1评论
请教一下,Mounriver 编译不成功:找不到库文件,怎么整
816浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 04:38 , Processed in 0.834021 second(s), Total 48, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号