go go go, 让RSL10的LED开始闪烁(文尾有小彩蛋)
[复制链接]
本帖最后由 sunduoze 于 2021-4-17 23:51 编辑
目标:搭建基础开发环境,实现arduino接口RS10-002GEVB 板板载LED闪烁
环境:Windows10 + Keil5 + Segger Jlink + RS10-002GEVB 板
Step1:Keil5 + Segger Jlink这两个环境安装此处略过,下载ONSemiconductor.RSL10.3.4.2-4.pack,
并安装。
Step2:打开Keil环境,点击pack install 图标并弹出其界面, 在Devices中选择RSL10,然后点击右侧Examples,选择blinky然后点击Copy按钮。
Step3:按照Step2操作后弹出Copy Example 对话框,选择路径并点击ok即可。
Step4:通过Step3,工程会自动打开,此时连接RS10-002GEVB 到电脑,然后选择Options for Target按钮并弹出页面,选择Debug栏,再选择Settings,弹出新的页面,此时Debug栏可见J-Link SN(RSL10板载J-Link) & RSL10 的ID Code,这时说明板卡连接状态正常。
Step5:点击Flash Download栏,发现没有flash编程算法,自己也没找到,此时只能用外部的segger工具烧录固件了。
Step6:点击图中所示的编译按钮,等待编译完成0Error,2warning
Warning1, 报结尾没有END指令,emmm,issue记下来,目前不知为何
Warning2, sct文件中,报DRAM中ZI (Zero Initialize)仅匹配已删除的未使用的章节,也不明白,issue
Step7. By the way, 先处理主线任务,从目录D:\Desktop\blink\source\samples\uv\blinky\Objects找到编译生成的hex文件,然后搜索并打开J-Flash Lite,中间提示的对话框忽略,软件打开后选择Data File,然后找到hex并打开,然后点击Program Device,完成烧录,可以看到开发板上的LED 1(DIO6)1s闪烁2次。
附上工程
blink.zip
(58.76 KB, 下载次数: 7)
***彩蛋****
1.查看main函数中初始化后有PRINTF函数,而且开发板自带的j-link是支持usb CDC虚拟串口的,但是用串口助手并没有看到有任何信息发出。
2. 跳转到printf文件的条件编译部分发现是空的,刚好看到SEGGER_RTT的头,emmm,那就用j-link的RTT来打印print信息吧
3.打开工程中的魔法棒,选择c/c++,在define中增加OUTPUT_INTERFACE = OUTPUT_RTT,记得用英文逗号或空格隔开,如果用串口打印则输入:OUTPUT_INTERFACE = OUTPUT_UART,配置完成后重新编译&烧录
4.搜索电脑J-Link RTT Viwer并打开,按照如下123操作,然后会看到左边RTT黑色框中会print 代码中的信息。
5.更换成串口,再来,emmm,灯不闪了,打开串口助手(baud 115200 选择cdc uart),可以看到打印了设备初始化,后续的LED ON & LED OFF都去哪了?
6. 用j-link在线debug,发现程序死在了DMA Busy里边,emmmmm,先吃饭,有空再继续解。
OUTPUT_INTERFACE = OUTPUT_UART配置下的附件
blink_uart.zip
(84.85 KB, 下载次数: 6)
</br>
***************************************华丽分割线************************************************************
</br> 20210417
1.今天稍看了下源代码,blinky代码中,还包含按键输入的功能,使用RTT PRINTF模式现象如下:
通过按键控制led是否闪烁
2.找到使用uart 打印用例的bug,OUTPUT_INTERFACE = OUTPUT_UART,uart printf是使用的uart tx dma,开了dma 通道7的中断,DMA7_IRQn,与此同时也开启了按键输入中断DIO0_IRQHandler,但是按键输入中断在初始化部分未配置中断优先级,而且故在app.c 95行增加
```
NVIC_SetPriority(DIO0_IRQn, 0x5);
```
按键中断优先级配置低于uart 的tx dma中断
编译,运行,还是不正常。。。。(每一次大的间隔是按完按键后打印的信息)
在线debug发现app.c 的38行条件,else if (DIO_DATA->ALIAS[BUTTON_DIO] == 0),其中DIO_DATA->ALIAS[BUTTON_DIO]这个条件总是为0,按键第一次按下时会触发,但是已经拿开了,为什么还会触发一次?奇怪。。。,先酱紫,休息了。
|