打印
[LOOK]

LOOK_V20111018学习 第二帖:SPI(PDMA方式)及UART升级

[复制链接]
3112|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
      此贴是在第一帖基础上进行的,增加SPI的PDMA方式完成对W25Q16BV的读写操作,在调试过程中对page0的读操作后通过UART发送到PC出现了异常,发送到中途就停止但LED1的闪烁正常,通过Lee老师的指导,错误原因为uart0.put_numeral调用了puts,但puts的入口参数为ASCII,在此非常感谢老师孜孜不倦的教诲!
     具体调整如下:
     1.puts调整为cout:程序中通过_LOOK_UART_UPDATA_1208_1条件编译。具体内容为①.uart0_t类的其他都不变,把put*()都去掉;②.然后加一个write(): 及变量len ③Main.h 中添加#include "redapricot/ostream" ④LOOK_UATR.h 中加入using namespace redapricot;
typedef ostream_t<uart0_t, 16> os_uart0_t;
extern os_uart0_t cout;
取消extern uart0_t uart0;

⑤LOOK_UART.CPP 中添加os_uart0_t cout; 取消uart0_t uart0;
   2.调整数据读取时间:原为isr中调整为dsr中,程序中通过_LOOK_UART_UPDATA_1208_2条件编译。具体内容为:
isr()中关闭RDA中断,然后返回true
if (UART0.ISR().RDA_INT) {
// 关闭RDA中断
return true;
}
②在
dsr()中检查RDA_IF,读取数据。读完后再打开RDA中断。
dsr()
{
while (RDA_IF) {
读数据;
}
打开RDA中断
}

    3.增加SPI的PDMA方式对W25Q16BV的读写操作:
   UART0 接收到字符‘R’或‘r’实现读取W25Q16BV Page0 的内容;
   UART0 接收到字符‘U’或‘u’实现W25Q16BV Page0 的内容加1;
   UART0 接收到字符‘D’或‘d’实现W25Q16BV Page0 的内容减1;
   UART0 接收到字符‘M’或‘m’实现读取W25Q16BV制造商ID及设备ID。


   备注:以上调整详见工程包中具体代码!


运行截图:




未调整UART的故障截图:


工程包:
LOOK_SPI_PDMA_V111018.2.rar (75.87 KB)

相关帖子

沙发
lixiaoxu2meng| | 2011-12-8 11:07 | 只看该作者
顶   我暂时还不会C++ 等我以后学习 还得参考学习 三心前辈的帖子啊

使用特权

评论回复
板凳
plc_avr| | 2011-12-8 12:04 | 只看该作者
顶!C++及老师的LOOK真的是一点不会,我得努力学习......

使用特权

评论回复
地板
murex| | 2011-12-8 12:34 | 只看该作者
C++俺也得努力了,LOOK更不用说了,努力,努力,再努力,向三心靠拢,再向老师和菜农靠拢

使用特权

评论回复
5
john_lee| | 2011-12-8 18:29 | 只看该作者
本帖最后由 john_lee 于 2011-12-8 18:30 编辑

看了3心的截图,发现了一些比较怪异的地方,检查程序后发现了一个错误,在ostream_t中。

setw()是定义输出数据的宽度,只应对其后输出的第一个数据起作用,然后宽度值重置为0,即setw()所设置的宽度只是一次有效。

但redapricot:: ostream_t类在使用宽度值后却没有重置为0,造成了该值一直有效。

3心又发现了一个bug,功劳不小啊。

使用特权

评论回复
6
Swallow_0322|  楼主 | 2011-12-9 07:44 | 只看该作者
5# john_lee
呵呵!这个BUG是老师发现的,我写程序的时候意识到了,因为那几个cout的举例是后加入的,然后Read PAGE 0时发上来的数据所占位数就变了,所以后来我在UART发送Page 0的数据时加上了setw(2) 这样正好两个数据还可以加个空格,(*^__^*) 嘻嘻…… 因为C++缺乏理论学习,所以这个BUG我是发现不了的,只能意识到而已!

使用特权

评论回复
7
Swallow_0322|  楼主 | 2011-12-9 07:49 | 只看该作者
多谢lixiaoxu2meng、烈火、菜地支持,其实我C++根本就啥基础也没有,就是把C++的类当结构体看待,只不过C++的类的成员可以是函数,而且类中的程序访问权限还不同,其它的真就不知道啥了,大实话...  然后在老师的指导下UART的发送可以用cout感觉很爽,比之前的puts效率高而且使用灵活

使用特权

评论回复
8
abin0415| | 2012-4-29 01:58 | 只看该作者
MARK

使用特权

评论回复
9
JIESHENGKEJI| | 2013-5-7 12:31 | 只看该作者
学习中,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:播种一种行为,收获一种习惯;播种一种习惯,收获一种性格;播种一种性格,收获一种人生!

121

主题

1393

帖子

4

粉丝