s3c2440的IIS总线已经弄了好久,今天大概可以做个总结了吧,最近几天调试IIS弄了人有点疲惫,遇到了很多的问题,但是正是这些问题让我在成长。过多的情绪就不在表现了。进入今天的主题,IIS——DMA总结。
问题1、DMA物理地址
前面我调试DMA的时候也是调了好几天的DMA的UART通信一直得不到结果,后面上网搜了一些大概的信息,DMA需要传输时需要设置连续的物理地址,同时关于虚拟地址,物理地址,总线地址这些不明白,所以我就把#define buffer ((volatile unsigned short *)0x55000010)这种绝对地址当做唯一的物理地址。后面因为直接给个我认为的物理地址后程序不好弄就没调试了。到现在我还不是很明白虚拟地址,总线地址的,但是我现在对DMA的一点理解就是,因为DMA的传输很快,所以一般系统下的驱动的时候需要分配一个缓冲池,因为使用缓冲的缘故所以DMA需要获得连续的物理地址(不知道对不对,懂得的朋友麻烦指出一下,谢谢)。但是我现在的经验是DMA传输可以使用全局数组,作为源地址的时候还可以是字符串常量(字符串常量因为是存放在内存的常量文字区,不能改变值,所以不能作为目的地址)。这里是作为裸机编程的经验。
问题2、串口无法发送接收十六进制数据
对于这个问题我犯下了一个很严重的问题,一开始不知道从自己的程序找问题,苦苦的去这里论坛里面,群里面和网上找答案。后面还因此换了一个串口调试助手,好悲!因为我之前调试过一段时间的串口,应该说也算弄了挺久的串口的吧,所以就很信任自己的程序,因为是接收数据然后再会送给串口助手,一直没有问题。但是因为我的串口中断没处理好,导致了串口无法发送十六进制数据。发送十六进制数据的是中断跑飞了。
问题3、IIS没有声音
这个问题要是直接来看的话那是很抽象的,因为这个原因会有很多,但是一个问题就是我参考了别人的程序写的,我该了别人的程序可以得到声音,而且我的程序和他的基本是相同的。问题就出现后我一直苦苦认为是初始化的问题,或者是时序的问题,比如先初始化哪里后初始化哪里的问题,当然这个问题值得平时注意,有很多情况就是因为这些很难发现的时序问题。解决方法,C语言优先级,上一篇博客中已经讲到了,痛苦几天的