裸机系列——DMA总结

弄了好几天的DMA终于是成功了,只是成功了一小步,还要继续改善,为什么配置几个DMA寄存器这么难了,还要好好想想为什么?先记录一下,2011-04-21 10:31:54 又过了一天,现在的我还是不是很明白一些问题,可能是知识面的限制还是什么知识是我不熟悉的。首先一开始我从UART传到内存中,但是一直到现在都没解决的问题就在这里了,那就是一个关于DMA传输的物理地址的问题,首先由于C语言的不熟悉导致我对ARM中地址的定义都变成了很迷糊的。在另一篇文章中将分析#define rUTXH0 (*(volatile unsigned char *)0x50000020)的定义。其实做DMA的实验从内存分配一个字符串常量在传输到UART发送缓存寄存器就行了。但是从串口到内存,物理地址是一个方面,其实分配了一个物理地址后,用jlink调试的时候第一次传输可以得到数据但是后面就只能看到地址的变化里面数据不再变化,可能的原因是内存是不是需要先察除再读写了?不明白。 关于串口的几点总结: 1. DMA地址需要连续的物理地址,一般应用程序分配的是线性地址,虚拟地址,很可能是不连续的,这里需要地址映射。这一点很重要,其次分清字符串常量,全局的字符数组的区别,多看看内存区域的分配关系。 2. DMA的初始化可以有硬件和软件请求,2440中的DMA请求是硬件自动发出的,也就是DMA的初始化是由硬件自动完成的,不需要编程初始化。使用外部DMA源时需要自己编程初始化DMA。 3.DMA寄存器配置,2种传输大小,unit和burst。2种模式请求和握手,demand和handshake。2种服务单一服务和整体服务,single和whole。2011-04-22 21:39:24

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
看门狗(Watchdog)是一种硬件定时器,用于监视系统是否正常运行。如果系统正常运行,那么看门狗会在设定的时间间隔内被定期喂狗;如果系统出现异常,看门狗就会在时间间隔到达后触发中断或复位操作,以恢复系统的正常运行。 在Mini2440上,看门狗的控制寄存器位于WTDAT、WTCON和WTCNT中。其中,WTDAT用于设置看门狗的计数器初始值,WTCON用于配置看门狗的工作模式和计数器时钟源,WTCNT则是看门狗的计数器。 下面是一个简单的示例代码,用于启动看门狗并设置其定时时间为5秒钟: ```c #include "s3c2440_soc.h" void delay(int count) { while(count--); } int main() { /* 设置看门狗定时时间为5秒钟 */ WTCON = (0x1 << 5) | (0x3 << 3) | (0x1 << 0); /* 启动看门狗 */ WTCNT = 0x10000; while(1) { /* 喂狗 */ WTCNT = 0x10000; delay(100000); /* 业务处理 */ // ... } return 0; } ``` 在上述代码中,我们首先设置了看门狗的定时时间为5秒钟。然后在主循环中,我们每隔一段时间就喂狗一次,以保证看门狗不会触发中断或复位操作。同时,我们还可以在喂狗的时间间隔内进行业务处理。 需要注意的是,在实际应用中,我们通常不会像上述代码一样简单地启动一个看门狗并喂狗。实际上,我们需要在系统正常运行时定期喂狗,以确保看门狗不会触发中断或复位操作;同时,我们还需要在系统出现异常时及时处理异常并复位系统,以防止系统陷入死循环或其他错误状态。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值