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