snifer

[原创]Blackfin嵌入式系统硬件的操作和原始测试驱动程序

0
阅读(2269)

最近在忙一个大工程,刚刚告一段落,今天把我在设计中用到的驱动程序跟大家一起在探讨一下,希望大家能够指正。

利用Blackfin做开发,就必然要涉及到相关驱动的开发,我写的这个驱动程序叫做short(Simple Hardware Operations and Raw Tests,简单硬件的操作和原始测试)。它所做的就是读写并口(或其他I/O设备)的各种8位端口。每个设备节点(拥有唯一的次设备号)访问一个不同的端口。short设备没有任何实际用途;将它独立出来只是为了能用一条指令来从外部对端口进行操作。如果你不太了解I/O端口,那么可以通过使用short来熟悉它;你可以测量它传输数据要消耗的时间或者进行其它的测试。

        我建议你把一个LED焊到输出引脚上以便观察并口插座。每个LED都要串联一个1KΩ的电阻到一个接地的引脚上。如果将输出端口接到输入端口上,你就可以产生自己的输入供输入端口读取。

        如果你想将LED焊到D型插座上来观察并行数据,我建议你不要使用9号和10号引脚。 

       至于short,它是通过紧凑循环将用户数据拷贝到输出端口来实现写设备/dev/short0的,每次一个字节:

        while (count--)

              outb(*(ptr++), port);

        你可以运行下面的命令来使你的LED发光:

        echo -n any string > /dev/short0

        每个LED监控输出端口的一个位。注意只有最后写的字符数据才会在输出引脚上稳定地保持下来,被你观察到。因此,我建议你将-n选项传给echo程序来制止输出字符后的自动换行。

        读端口也是使用类似的函数,只是用inb代替了outb。为了从并口读取“有意义的”值,你需要将某个硬件连到并口插座的输入引脚上来产生信号。如果没有输入信号,你只会读到始终是相同字节的无穷的输出流。

        覆盖所有可能的I/O函数,每个short设备都提供了三个变种:/dev/short0执行的是上面给出的循环,/dev/short0p使用outb_pinb_p来替代前者使用的“较快的”函数,而/dev/short0s使用了串指令。共有四个这样的设备,从short0short3,每个都读写一个端口。这四个端口是连续的。

        在Blackfin上编译时,由于不提供insboutbshort0s设备就和short0一样了。

        虽然short不能进行“真正的”硬件控制,但它可以作为一个对不同的指令计时的有趣的测试平台,并且可以作为一个学习如何进行“真正的”硬件控制的开始。任何对写驱动程序有兴趣的人肯定拥有更多更有趣的设备,但老的傻瓜式的并口还是能作些有用的工作的-我自己就是在早上打开收音机后用它来为我准备咖啡的。