linux下像51一样编程序的一个例子(像用51一样用linux,甚至比51

[复制链接]
6044|33
 楼主| wangkj 发表于 2007-7-18 15:56 | 显示全部楼层 |阅读模式
刚才和一个朋友聊天,说&nbsp;linux的门坎太高。控制硬件必须通过驱动。<br />我的这个例子是独创,通过地址映射直接控制硬件。<br />这可是花了我一个月功夫搞定的。<br />这样很多对linux不怎么了解的人很容易学会这个程序。<br />估计这个程序对15us以上的数据采集速度应该问题不大。<br />用到是是pc口。是我的那个A9&nbsp;core板的一个例子。<br /><br />/*-------------------------------------------------------------------------------------<br />date:20070625<br />author:&nbsp;wkj<br />ver&nbsp;1.0<br />contrl&nbsp;8*8&nbsp;led&nbsp;matrix&nbsp;example&nbsp;,Application&nbsp;direct&nbsp;control&nbsp;HardWare<br />input:XXXXXX<br />output:return&nbsp;0<br />---------------------------------------------------------------------------------------*/<br />#include&nbsp;&ltsys/types.h&gt<br />#include&nbsp;&ltstdio.h&gt<br />#include&nbsp;&ltstdarg.h&gt<br />#include&nbsp;&ltstdlib.h&gt<br />#include&nbsp;&ltstring.h&gt<br />#include&nbsp;&ltunistd.h&gt<br />#include&nbsp;&ltfcntl.h&gt<br />#include&nbsp;&lterrno.h&gt<br />#include&nbsp;&ltsignal.h&gt<br />#include&nbsp;&lttime.h&gt<br />#include&nbsp;&ltsys/time.h&gt<br />#include&nbsp;&ltsys/ioctl.h&gt<br />#include&nbsp;&ltsys/stat.h&gt<br />#include&nbsp;&ltsys/file.h&gt<br />#include&nbsp;&quot;gpio.h&quot;<br />#include&nbsp;&quot;main.h&quot;<br />#include&nbsp;&quot;io.h&quot;<br />#include&nbsp;&ltstdarg.h&gt<br />#include&nbsp;&ltmemory.h&gt<br />#include&nbsp;&lterrno.h&gt<br />#include&nbsp;&ltsys/types.h&gt<br />#include&nbsp;&ltsys/socket.h&gt<br />#include&nbsp;&ltsys/mman.h&gt<br />#include&nbsp;&ltsys/ioctl.h&gt<br />#include&nbsp;&ltfcntl.h&gt<br />#include&nbsp;&ltsignal.h&gt<br />#include&nbsp;&quot;font5x7.h&quot;<br />#define&nbsp;DEVICE_FILE_NAME&nbsp;&quot;scan_keyb&quot;<br /><br /><br />void&nbsp;&nbsp;&nbsp;&nbsp;*map_base;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//phy&nbsp;0xffff&nbsp;f000&nbsp;virtual&nbsp;address<br /><br />#define&nbsp;DEBUGMSG(x,&nbsp;y,&nbsp;args...)&nbsp;printf(y,&nbsp;##args)<br /><br /><br />//#define&nbsp;DEBUGMSG(x,&nbsp;y,&nbsp;args...)<br />FILE&nbsp;*f;<br />int&nbsp;n,fd;<br /><br />int&nbsp;main(int&nbsp;argc,&nbsp;char&nbsp;*argv[])<br />{<br />char&nbsp;num,status=0;<br />int&nbsp;i,j,count;<br />int&nbsp;ch;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;<br />printf(&quot;start
&quot;);<br />if((fd&nbsp;=&nbsp;open(&quot;/dev/mem&quot;,&nbsp;O_RDWR&nbsp;|&nbsp;O_SYNC))&nbsp;==&nbsp;-1){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DEBUGMSG(DEBUG_ERR,&nbsp;&quot;gpio:&nbsp;Error&nbsp;opening&nbsp;/dev/mem
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(-1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//map&nbsp;0xffff<br />map_base&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;mmap(0,&nbsp;MAP_SIZE,&nbsp;PROT_READ&nbsp;|&nbsp;PROT_WRITE,&nbsp;MAP_SHARED,&nbsp;fd,&nbsp;AT91_SYS);//AT91_SYS&nbsp;=&nbsp;0xffff&nbsp;f000<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />*((volatile&nbsp;unsigned&nbsp;int*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_PER&nbsp;))))&nbsp;=&nbsp;0xFFFF0000;&nbsp;//PC31:PC16&nbsp;as&nbsp;gpio<br />*((volatile&nbsp;unsigned&nbsp;int*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_OER&nbsp;))))&nbsp;=&nbsp;0xFFFF0000;<br /><br />/*<br />8*8&nbsp;LED&nbsp;mattix&nbsp;<br />1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A<br />2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B<br />3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C<br />4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D<br />5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E<br />6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F<br />7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;G<br />8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;H<br />Data(-)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scan&nbsp;line(+)<br />D0-8-PC16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D0-1-PC31<br />D1-7-PC18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D1-6-PC20<br />D2-3-PC24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D2-A-PC30<br />D3-C-PC25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D3-4-PC27<br />D4-2-PC29&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D4-H-PC17<br />D5-E-PC23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D5-B-PC28<br />D6-F-PC21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D6-G-PC19<br />D7-5-PC22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D7-D-PC26<br /><br />*/<br />for(;;)&nbsp;//dispaly&nbsp;all&nbsp;character&nbsp;in&nbsp;Fonts&nbsp;lib<br />&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;*((volatile&nbsp;unsigned&nbsp;int*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_CODR))))&nbsp;=&nbsp;0xFFFF0000;&nbsp;//0&nbsp;&nbsp;default&nbsp;state<br />&nbsp;&nbsp;&nbsp;&nbsp;usleep(1000000);<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=0;i&lt8;i++)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((volatile&nbsp;unsigned&nbsp;int*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_CODR))))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;(0x1&lt&lt31)|(0x1&lt&lt20)|(0x1&lt&lt30)|(0x1&lt&lt27)|(0x1&lt&lt17)|(0x1&lt&lt28)|(0x1&lt&lt19)|(0x1&lt&lt26);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((volatile&nbsp;unsigned&nbsp;int*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_SODR))))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=(0x1&lt&lt16)|(0x1&lt&lt18)|(0x1&lt&lt24)|(0x1&lt&lt25)|(0x1&lt&lt29)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|(0x1&lt&lt23)|(0x1&lt&lt21)|(0x1&lt&lt22);//all&nbsp;col&nbsp;light&nbsp;off<br />/*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//*((volatile&nbsp;unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_CODR))))=0xffff0000;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//=&nbsp;(0x1&lt&lt31)|(0x1&lt&lt20)|(0x1&lt&lt30)|(0x1&lt&lt27)|(0x1&lt&lt17)|(0x1&lt&lt28)|(0x1&lt&lt19)|(0x1&lt&lt26);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((volatile&nbsp;unsigned&nbsp;int*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_SODR))))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;(0x1&lt&lt31);//|(0x1&lt&lt20)|(0x1&lt&lt30)|(0x1&lt&lt27)|(0x1&lt&lt17)|(0x1&lt&lt28)|(0x1&lt&lt19)|(0x1&lt&lt26);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((volatile&nbsp;unsigned&nbsp;int*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_CODR))))&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=(0x1&lt&lt16);//|(0x1&lt&lt18)|(0x1&lt&lt24)|(0x1&lt&lt25)|(0x1&lt&lt29)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//|(0x1&lt&lt23)|(0x1&lt&lt21)|(0x1&lt&lt22);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(;;);<br />*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{//select&nbsp;which&nbsp;col&nbsp;is&nbsp;on<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0://D0.PC31=1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((volatile&nbsp;unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_SODR))))&nbsp;=&nbsp;0x1&lt&lt31;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;1://D1.PC20=1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((volatile&nbsp;unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_SODR))))&nbsp;=&nbsp;0x1&lt&lt20;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;2://D2.PC30=1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((volatile&nbsp;unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_SODR))))&nbsp;=&nbsp;0x1&lt&lt30;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;3://D3.PC27=1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((volatile&nbsp;unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_SODR))))&nbsp;=&nbsp;0x1&lt&lt27;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;4://D4.PC17=1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((volatile&nbsp;unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_SODR))))&nbsp;=&nbsp;0x1&lt&lt17;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;5://D5.PC28=1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((volatile&nbsp;unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_SODR))))&nbsp;=&nbsp;0x1&lt&lt28;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;6://D6.PC19=1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((volatile&nbsp;unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_SODR))))&nbsp;=&nbsp;0x1&lt&lt19;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;7://D7.PC26=1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((volatile&nbsp;unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_SODR))))&nbsp;=&nbsp;0x1&lt&lt26;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Put&nbsp;on&nbsp;col&nbsp;line&nbsp;Fonts[i+j]<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(j=0;j&lt8;j++)&nbsp;//LED&nbsp;matrix&nbsp;col&nbsp;0..7<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(j)//col&nbsp;dot<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{//1&nbsp;mean&nbsp;the&nbsp;colum&nbsp;is&nbsp;on<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0://D0.PC16=0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((volatile&nbsp;unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_CODR))))&nbsp;=&nbsp;0x1&lt&lt16;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;1:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((volatile&nbsp;unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_CODR))))&nbsp;=&nbsp;0x1&lt&lt18;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;2:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((volatile&nbsp;unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_CODR))))&nbsp;=&nbsp;0x1&lt&lt24;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;3:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((volatile&nbsp;unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_CODR))))&nbsp;=&nbsp;0x1&lt&lt25;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;4:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((volatile&nbsp;unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_CODR))))&nbsp;=&nbsp;0x1&lt&lt29;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;5:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((volatile&nbsp;unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_CODR))))&nbsp;=&nbsp;0x1&lt&lt23;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;6:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((volatile&nbsp;unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_CODR))))&nbsp;=&nbsp;0x1&lt&lt21;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;7:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((volatile&nbsp;unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_CODR))))&nbsp;=&nbsp;0x1&lt&lt22;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;%d,%d
&quot;,i,j);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;usleep(300000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />close(fd);<br />return&nbsp;0;<br />}<br />
flylongins 发表于 2007-7-18 18:37 | 显示全部楼层

re

不错,有想法。<br /><br /><br />include&nbsp;&quot;font5x7.h&quot;<br /><br />这个是哪个头文件。<br />
 楼主| wangkj 发表于 2007-7-18 22:44 | 显示全部楼层

ascii font lib

This&nbsp;is&nbsp;only&nbsp;example,&nbsp;not&nbsp;include&nbsp;all&nbsp;file
王紫豪 发表于 2007-7-19 00:06 | 显示全部楼层

顶!!!支持

  
jack.king 发表于 2007-7-19 23:32 | 显示全部楼层

请问学习ARM7必须要学习LINUX吗?

请问学习ARM7必须要学习LINUX吗?
 楼主| wangkj 发表于 2007-7-20 08:04 | 显示全部楼层

想有钱图,用arm9+linux

arm7比单片机高点
wangharry 发表于 2007-7-25 08:43 | 显示全部楼层

wangkj果然高人中的高人

高人啊
 楼主| wangkj 发表于 2007-7-25 09:28 | 显示全部楼层

这个比较复杂,等我的板子回来了

再写个简单的,控制一个GPIO的。这样大家就更明白了。<br /><br />这个控制了16个GPIO,而且还有图形点阵算法,所以很多人看晕了了很正常。<br />
sklar 发表于 2007-7-25 11:54 | 显示全部楼层

..................

.....................
leifeng 发表于 2007-7-31 13:50 | 显示全部楼层

等待wangkj的PIO控制的例子

  
Hotpοwer 发表于 2007-8-1 03:12 | 显示全部楼层

通过此方法,可以控制PIO,usart,spi...哈哈

  
 楼主| wangkj 发表于 2007-8-1 08:16 | 显示全部楼层

确实如此!

楼上说的对。不过,这适合于对硬件了解,对os不太清楚的。<br />然而,uart,网络等这些用os的功能更合适。
 楼主| wangkj 发表于 2007-8-4 15:17 | 显示全部楼层

这是gpio的最简单程序

/*-------------------------------------------------------------------------------------<br />date:20070625<br />author:&nbsp;wkj<br />ver&nbsp;1.0<br />contrl&nbsp;SPK&nbsp;GPIO&nbsp;example&nbsp;,Application&nbsp;direct&nbsp;control&nbsp;HardWare<br />input:XXXXXX<br />output:return&nbsp;0<br />---------------------------------------------------------------------------------------*/<br />#include&nbsp;&ltsys/types.h&gt<br />#include&nbsp;&ltstdio.h&gt<br />#include&nbsp;&ltstdarg.h&gt<br />#include&nbsp;&ltstdlib.h&gt<br />#include&nbsp;&ltstring.h&gt<br />#include&nbsp;&ltunistd.h&gt<br />#include&nbsp;&ltfcntl.h&gt<br />#include&nbsp;&lterrno.h&gt<br />#include&nbsp;&ltsignal.h&gt<br />#include&nbsp;&lttime.h&gt<br />#include&nbsp;&ltsys/time.h&gt<br />#include&nbsp;&ltsys/ioctl.h&gt<br />#include&nbsp;&ltsys/stat.h&gt<br />#include&nbsp;&ltsys/file.h&gt<br />#include&nbsp;&quot;gpio.h&quot;<br />#include&nbsp;&quot;main.h&quot;<br />#include&nbsp;&quot;io.h&quot;<br />#include&nbsp;&ltstdarg.h&gt<br />#include&nbsp;&ltmemory.h&gt<br />#include&nbsp;&lterrno.h&gt<br />#include&nbsp;&ltsys/types.h&gt<br />#include&nbsp;&ltsys/socket.h&gt<br />#include&nbsp;&ltsys/mman.h&gt<br />#include&nbsp;&ltsys/ioctl.h&gt<br />#include&nbsp;&ltfcntl.h&gt<br />#include&nbsp;&ltsignal.h&gt<br />#define&nbsp;DEVICE_FILE_NAME&nbsp;&quot;scan_keyb&quot;<br /><br /><br />void&nbsp;&nbsp;&nbsp;&nbsp;*map_base;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//phy&nbsp;0xffff&nbsp;f000&nbsp;virtual&nbsp;address<br /><br />#define&nbsp;DEBUGMSG(x,&nbsp;y,&nbsp;args...)&nbsp;printf(y,&nbsp;##args)<br /><br /><br />//#define&nbsp;DEBUGMSG(x,&nbsp;y,&nbsp;args...)<br />FILE&nbsp;*f;<br />int&nbsp;n,fd;<br /><br />int&nbsp;main(int&nbsp;argc,&nbsp;char&nbsp;*argv[])<br />{<br />char&nbsp;num,status=0;<br />int&nbsp;i,j,count;<br />int&nbsp;ch;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;<br />printf(&quot;start
&quot;);<br />if((fd&nbsp;=&nbsp;open(&quot;/dev/mem&quot;,&nbsp;O_RDWR&nbsp;|&nbsp;O_SYNC))&nbsp;==&nbsp;-1){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DEBUGMSG(DEBUG_ERR,&nbsp;&quot;gpio:&nbsp;Error&nbsp;opening&nbsp;/dev/mem
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(-1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//map&nbsp;0xffff<br />map_base&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;mmap(0,&nbsp;MAP_SIZE,&nbsp;PROT_READ&nbsp;|&nbsp;PROT_WRITE,&nbsp;MAP_SHARED,&nbsp;fd,&nbsp;AT91_SYS);//AT91_SYS&nbsp;=&nbsp;0xffff&nbsp;f000<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />*((volatile&nbsp;unsigned&nbsp;int*)(map_base&nbsp;+&nbsp;((PIOB_OFFSET&nbsp;+&nbsp;AT91_PIO_PER&nbsp;))))&nbsp;=&nbsp;0x1&lt&lt28;&nbsp;//PB28&nbsp;&nbsp;gpio&nbsp;as&nbsp;SPEAKER<br />*((volatile&nbsp;unsigned&nbsp;int*)(map_base&nbsp;+&nbsp;((PIOB_OFFSET&nbsp;+&nbsp;AT91_PIO_OER&nbsp;))))&nbsp;=&nbsp;0x1&lt&lt28;<br /><br />for(j=0;j&lt1000;j++)<br />&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;*((volatile&nbsp;unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOB_OFFSET&nbsp;+&nbsp;AT91_PIO_CODR))))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;0x1&nbsp;&lt&lt28;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;%d
&quot;,j);<br />&nbsp;&nbsp;&nbsp;&nbsp;usleep(500000);<br />&nbsp;&nbsp;&nbsp;&nbsp;*((volatile&nbsp;unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOB_OFFSET&nbsp;+&nbsp;AT91_PIO_SODR))))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;0x1&nbsp;&lt&lt28;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;usleep(500000);<br />&nbsp;&nbsp;}<br />close(fd);<br />return&nbsp;0;<br />}<br />
 楼主| wangkj 发表于 2007-8-4 15:18 | 显示全部楼层

完整工程文件在amd.9966.org

自己找找,那个网站也是用这个arm9做的。<br />而且,这个arm9网站已经支持编译了<br />
 楼主| wangkj 发表于 2007-8-4 15:23 | 显示全部楼层

这是一个内置gcc的arm9板子,编程比51还简单

测试地址:<br />telnet&nbsp;arm.9966.org<br />guest<br />123456<br /><br />cd&nbsp;/root.big/win/speaker<br />make&nbsp;clean<br />make<br /><br />这可是在arm中编译arm代码,连移植都省了。<br />&nbsp;<br /><br />/root.big/win/这个目录是windows共享的,用网上邻居就可以直接编辑其中的文件!<br />编译的时候,telnet到主机,然后直接执行make就行了!<br />51还需要在windows下安装个keil&nbsp;c,这个在windows下不需要安装任何软件。
 楼主| wangkj 发表于 2007-8-4 15:25 | 显示全部楼层

所有的软件下载地址:

arm.9966.org/ipk
xwj 发表于 2007-8-4 18:14 | 显示全部楼层

我觉得,还是先定义几个宏方便些,

这样子就算再简单初学者也会看得眼花缭乱的.
xwj 发表于 2007-8-4 18:18 | 显示全部楼层

wangkj,你那网站最好再加个留言板,临时网站一般人都懒得

  
xwj 发表于 2007-8-4 18:23 | 显示全部楼层

或者匿名发言,或者自动注册都行

自己去改下ASP教本吧,很简单的
drq1997 发表于 2007-8-5 00:11 | 显示全部楼层

arm 占位

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

580

主题

9972

帖子

24

粉丝
快速回复 在线客服 返回列表 返回顶部