BF609 CCES下的SPI驱动调试--就这样被它折磨了一周

在CCES环境下,ADI 自带了驱动接口函数,为驱动调试省下一大杯子事;但是这为人熟知的SPI,在调试过程中还是遇到了挫折,几度想撞墙;

最大的折磨: 死机
实际的SPI驱动接口是全双工功能的, 所以传输完成后,接口函数的返回值是ADI_SPI_TRANSCEIVER_PROCESSED,没有区分是发送完成还是接收完成;我的应用只需要半双工就可以了,按我的思路,是需要区分的,所以,我在驱动的StartInterruptTransceiver()函数里做了修改,判断如果提交的接收buffer是NULL时,只使能transmit;如果提交的发送buffer是NULL时,只使能resecver;这本来毫无争议,实际上这是对驱动的一种优化;但当发送21个字节时,系统崩溃了,PC指针留在出中断,返回主函数时,很像堆栈溢出,查找每个流程和函数,没有发现任何原因,人都快崩溃了;一个偶然的机会,找到了原因,跟代码毫无关系,是由于CCES没有配置使用外部128MB的RAM,导致内存不足,系统崩溃;

第二个bug: 丢数据
发送8字节以上的帧,会插入0X00,经琢磨,想到是总线速度太慢的问题(之前是50MHz,SPI波特率是25MHz,slave模式),总线改为25MHz,丢的字节更多了;改为最大的200MHz,居然还是丢;最终放弃了data interrupt模式,改为DMA模式,问题得解!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值