tiny4412 裸机程序 三、关闭看门狗和调用C程序
来源:互联网 发布:软件方案模板 编辑:程序博客网 时间:2024/05/20 13:13
一、原理说明
上是章中大家可能有会觉得奇怪,CPU不是有看门狗嘛?为什么CPU没有复位,程序还能正常工作呢?
查看Eyxnos4412的手册,第5章简要的说明了其启动顺序,如下图3-1所示是Eyxnos4412启动顺序图,这里虽然没有说的很清楚,但内部iROM和BL1程序中是起一些初始化时钟,DRAM等工作的,其也可能已经使看门狗不工作了。所以上一章程序中,我们也没有人为的关闭看门狗,程序也能正常工作。这一节,我们尝试自己关闭开门狗后再点亮LED灯。
看门狗的作用在于监控CPU的运行,保证在诸如噪音和系统错误等这样的故障干扰情况下能
尽快恢复正常工作。看门狗与PWM定时器都能实现定时的功能,两者的区别在于看门狗能发出复位信号而PWM定时器不能,后面将会有具体的章节讲解看门狗的定时和复位功能,这里我们只是简单的将其关闭,然后跳转调用一个C程序。
图3-1、Exynos4412启动顺序图
二、程序说明
完整代码见目录2_led_s_wtd。
1. start.S
与代码1_led_s_wtd相比,在代码2_led_s_wtd中,start.S多了两点不一样的地方:
1) 手动关闭了看门狗,只需往寄存器WTCON写入0即可;
2) 调用了C函数实现延时的功能,以测试IROM中的固化代码是否设置了栈;
2. delay.c
内含一个普通的C语言延时函数,代码如下:
void delay(int r0)
{
volatile int count = r0;
while (count--);
}
汇编调用C函数时,当参数个数不超过4个,使用r0~r3这4个寄存器来传递参数;如果参数个数超过4个,剩余的参数通过栈来传递,delay()只有1个参数,所以用r0来传递。另外,volatile是为了避免编译器自动帮我们优化掉这段代码造成无法延时。 Makefile和sd_fuse里的程序与上一章程序并没有差异,以后若代码与前一个目录的代码相比没有发生变化则将不再赘述。
三、完整的烧写过程
已将SD卡插入电脑,假设linux识别了SD卡,其识别号为sdb。执行下面命令:
# chmod 777 –R 2_leds_s_wtd
# cd 2_leds_s_wtd
# make
# cd sd_fuse
# make
# ./ fast_fuse /dev/sdb
四、上电实验
将SD卡插入到Tiny4412板上子,将启动开关设置拔到SD卡启动端,上电,开机,可以看到4个LED灯正常闪烁,说明手动关闭看门狗成功,同时证明IROM中的固化代码已经设置了栈。为什么程序成功调用C函数就说明了IROM的固化代码设置了栈呢?是因为汇编中调用C函数时,参数的传递、现场的保存和恢复、临时变量的保存等都需要使用到栈,在delay()函数中变量count就是临时变量,程序运行成功说明栈已经设置好了,更详细的解释将会留到下一章。
- tiny4412 裸机程序 三、关闭看门狗和调用C程序
- 五.ARM裸机学习之汇编写启动代码之关看门狗,开iCache,汇编程序和C程序互相调用
- tiny4412 裸机程序 一、说明
- tiny4412 裸机程序 四、设置栈和C语言点亮LED
- tiny4412 裸机程序 五、控制icache
- Tiny4412裸机程序之UART收发数据
- Tiny4412-LED小灯裸机程序
- Tiny4412-LED小灯裸机程序
- tiny4412 裸机程序 二、汇编点亮LED灯
- tiny4412 裸机程序 七、重定位代码到DRAM
- Tiny4412裸机程序,按键检测(轮询方式)
- 嵌入式驱动开发笔记(裸机程序篇)---还是看门狗
- tiny4412 裸机程序 六、重定位代码到IRAM+0x8000
- tiny4412 裸机程序 八、重定位到DRAM及LCD实验
- tiny4412 裸机程序 九、串口排查驱动原因及字符图片显示
- tiny6410裸机程序之三、串口通讯
- tiny6410裸机实验第2章--------------点亮LED灯(外设基地址和关闭看门狗)
- s3c2440的LED点灯裸机C程序
- cocos2d-x AnchorPoint锚点
- Service层在分层中的作用
- Android libmp3lame详解
- HashMap,LinkedHashMap,TreeMap的区别
- Excel vba 求助。
- tiny4412 裸机程序 三、关闭看门狗和调用C程序
- STL常用知识
- Linux内核通用链表 <linux/list.h>阅读
- shell-case
- home键无反应分析处理(资料搜集)
- 四色电视:大趋势与微革命
- Unable to instantiate default tuplizer/Could not find a getter for orders in class
- Android下使用lamemp3库将PCM录音数据压缩为MP3格式
- 《李逵探母》_0