AT91SAM7X256程序问题

[复制链接]
4397|11
 楼主| lee1980 发表于 2008-3-12 18:27 | 显示全部楼层 |阅读模式
哪位朋友做过AT91SAM7X256的UART测试程序,能够实现从PC往232口发数据,经7X256的UART把数据再传给PC就行。最好能传一段代码给我,谢谢了!<br />(也可以发到我邮箱:kyyh1978@126.com)
sasinop 发表于 2008-3-12 18:52 | 显示全部楼层

这个也要要呀??

  
sasinop 发表于 2008-3-12 18:53 | 显示全部楼层

中断函数

============================================================*/<br />__ramfunc&nbsp;void&nbsp;Usart_232_irq_handler(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91PS_USART&nbsp;USART_pt&nbsp;=&nbsp;AT91C_BASE_US1;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;status;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;temp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;08-01-15&nbsp;modify<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;status&nbsp;=&nbsp;USART_pt-&gtUS_CSR;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;if&nbsp;(&nbsp;status&nbsp;&&nbsp;AT91C_US_RXRDY)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;AT91F_US_GetChar(USART_pt);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(G_usart1_receiveing==1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(G_usart1_received_en==1)//receive&nbsp;the&nbsp;data<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;G_usart1_recive_buf[G_usart1_receive_datalen]&nbsp;=&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;G_usart1_receive_datalen++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;G_usart1_receive_length--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;G_chksum1+=temp;<br />&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;if(G_usart1_receive_length==0)<br />&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;&nbsp;if&nbsp;((G_chksum1&nbsp;&&nbsp;0x00ff)==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;if&nbsp;(G_enabledprocess==1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;G_sciokflag1=1;<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;G_usart1_receiveing=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;G_usart1_received_en=0;<br />&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;&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;return;<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;//receive&nbsp;the&nbsp;length&nbsp;for&nbsp;data<br />&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;&nbsp;&nbsp;G_usart1_receive_length&nbsp;=&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;G_usart1_recive_buf[1]&nbsp;=&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;G_usart1_receive_datalen&nbsp;=&nbsp;2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;G_usart1_received_en&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;G_chksum1+=temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />&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;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(temp&nbsp;==&nbsp;RECEIVE_BOOT_CODE)//receive&nbsp;boot&nbsp;code<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;G_usart1_receiveing&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;G_usart1_recive_buf[0]&nbsp;=&nbsp;RECEIVE_BOOT_CODE;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;G_chksum1=RECEIVE_BOOT_CODE;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />if&nbsp;(&nbsp;status&nbsp;&&nbsp;AT91C_US_TIMEOUT)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;USART_pt-&gtUS_CR=AT91C_US_RSTRX;<br />&nbsp;&nbsp;&nbsp;&nbsp;USART_pt-&gtUS_CR=AT91C_US_RXEN;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;//*&nbsp;Reset&nbsp;the&nbsp;satus&nbsp;bit<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;G_usart1_received_en=0;<br />&nbsp;&nbsp;G_usart1_receiveing=0;<br />&nbsp;&nbsp;USART_pt-&gtUS_CR&nbsp;=&nbsp;AT91C_US_RSTSTA;<br />}<br />
sasinop 发表于 2008-3-12 18:54 | 显示全部楼层

初始化

<br />void&nbsp;Usart_Init&nbsp;(&nbsp;void&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91PS_USART&nbsp;COM0&nbsp;=&nbsp;AT91C_BASE_US0;<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91PS_USART&nbsp;COM1&nbsp;=&nbsp;AT91C_BASE_US1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//*&nbsp;Configure&nbsp;PIO&nbsp;controllers&nbsp;to&nbsp;periph&nbsp;mode<br />&nbsp;&nbsp;AT91F_PIO_CfgPeriph(&nbsp;AT91C_BASE_PIOA,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned&nbsp;int)&nbsp;AT91C_PA21_RXD1&nbsp;&nbsp;&nbsp;)&nbsp;|<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned&nbsp;int)&nbsp;AT91C_PA22_TXD1&nbsp;&nbsp;&nbsp;)&nbsp;|<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned&nbsp;int)&nbsp;AT91C_PA5_RXD0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;|<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned&nbsp;int)&nbsp;AT91C_PA6_TXD0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;,&nbsp;//&nbsp;Peripheral&nbsp;A<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0);&nbsp;//&nbsp;Peripheral&nbsp;B<br /><br />&nbsp;&nbsp;//&nbsp;First,&nbsp;enable&nbsp;the&nbsp;clock&nbsp;of&nbsp;the&nbsp;PIOB<br />&nbsp;&nbsp;AT91F_PMC_EnablePeriphClock&nbsp;(&nbsp;AT91C_BASE_PMC,&nbsp;1&nbsp;&lt&lt&nbsp;AT91C_ID_US1&nbsp;)&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91F_PMC_EnablePeriphClock&nbsp;(&nbsp;AT91C_BASE_PMC,&nbsp;1&nbsp;&lt&lt&nbsp;AT91C_ID_US0&nbsp;)&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Usart&nbsp;Configure<br />&nbsp;&nbsp;AT91F_US_Configure&nbsp;(COM1,&nbsp;MCK,&nbsp;AT91C_US_ASYNC_MODE,&nbsp;SciBaudRate,&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91F_US_Configure&nbsp;(COM0,&nbsp;MCK,&nbsp;AT91C_US_ASYNC_MODE,&nbsp;SciBaudRate,&nbsp;0);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Enable&nbsp;usart<br />&nbsp;&nbsp;&nbsp;&nbsp;COM1-&gtUS_CR&nbsp;=&nbsp;AT91C_US_RXEN&nbsp;|&nbsp;AT91C_US_TXEN;<br />&nbsp;&nbsp;&nbsp;&nbsp;COM0-&gtUS_CR&nbsp;=&nbsp;AT91C_US_RXEN&nbsp;|&nbsp;AT91C_US_TXEN;<br /><br />&nbsp;&nbsp;//*&nbsp;Enable&nbsp;USART&nbsp;IT&nbsp;error&nbsp;and&nbsp;RXRDY<br />&nbsp;&nbsp;AT91F_US_EnableIt(COM1,AT91C_US_TIMEOUT&nbsp;|&nbsp;AT91C_US_FRAME&nbsp;|&nbsp;AT91C_US_OVRE&nbsp;|AT91C_US_RXRDY);<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91F_US_EnableIt(COM0,AT91C_US_TIMEOUT&nbsp;|&nbsp;AT91C_US_FRAME&nbsp;|&nbsp;AT91C_US_OVRE&nbsp;|AT91C_US_RXRDY);<br />&nbsp;&nbsp;&nbsp;&nbsp;//AT91F_US_EnableIt(COM1,AT91C_US_RXRDY);<br /><br />&nbsp;&nbsp;//*&nbsp;open&nbsp;Usart&nbsp;&nbsp;interrupt<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91F_AIC_ConfigureIt&nbsp;(&nbsp;AT91C_BASE_AIC,&nbsp;AT91C_ID_US1,&nbsp;USART_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,&nbsp;Usart_232_irq_handler);<br />&nbsp;&nbsp;&nbsp;&nbsp;//AT91F_AIC_ConfigureIt&nbsp;(&nbsp;AT91C_BASE_AIC,&nbsp;AT91C_ID_US0,&nbsp;USART_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,&nbsp;Usart_485_irq_handler);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91F_AIC_EnableIt&nbsp;(AT91C_BASE_AIC,&nbsp;AT91C_ID_US1);<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91F_AIC_EnableIt&nbsp;(AT91C_BASE_AIC,&nbsp;AT91C_ID_US0);<br /><br />&nbsp;&nbsp;COM1-&gtUS_RTOR&nbsp;=&nbsp;20;&nbsp;&nbsp;&nbsp;//超时时间设定为20个字符时间<br />&nbsp;&nbsp;COM0-&gtUS_RTOR&nbsp;=&nbsp;20;&nbsp;&nbsp;&nbsp;//超时时间设定为20个字符时间<br />}<br />
sasinop 发表于 2008-3-12 18:55 | 显示全部楼层

设置拨特率

void&nbsp;SetBaudRate(unsigned&nbsp;char&nbsp;baudrate)<br />{<br />&nbsp;&nbsp;switch(baudrate)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x04:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//9600=0.15%<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SciBaudRate&nbsp;=&nbsp;9600;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x05:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//19200=0.15%<br />&nbsp;&nbsp;&nbsp;&nbsp;SciBaudRate&nbsp;=&nbsp;19200;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x06:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//38400=0.47%<br />&nbsp;&nbsp;&nbsp;&nbsp;SciBaudRate&nbsp;=&nbsp;38400;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x08:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//115200=0.47%<br />&nbsp;&nbsp;&nbsp;&nbsp;SciBaudRate&nbsp;=&nbsp;115200;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;default:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//57600=0.47%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SciBaudRate&nbsp;=&nbsp;57600;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;AT91F_US_SetBaudrate(AT91C_BASE_US1,&nbsp;MCK,&nbsp;SciBaudRate);<br />&nbsp;&nbsp;AT91F_US_SetBaudrate(AT91C_BASE_US0,&nbsp;MCK,&nbsp;SciBaudRate);<br />}
 楼主| lee1980 发表于 2008-3-12 19:33 | 显示全部楼层

多谢!

多谢楼上的朋友!我去试一下
 楼主| lee1980 发表于 2008-3-12 19:42 | 显示全部楼层

...

朋友,能不能把相关的标识符定义也一起传上来?
sasinop 发表于 2008-3-12 20:14 | 显示全部楼层

和额

中断里,的变量,你自己根据自己的需求定义<br /><br />方法就那样
 楼主| lee1980 发表于 2008-3-12 20:38 | 显示全部楼层

哦!

我刚开始弄这个,可不可以把你定义的给我参考一下?朋友
xhtxzxw 发表于 2008-3-13 13:50 | 显示全部楼层

嘿嘿

那些大写继母的标识符定义都在样例代码里有。
 楼主| lee1980 发表于 2008-3-13 15:32 | 显示全部楼层

...

主要是中断里的那些,你说的例程代码是在ATMEL网站里么?
xhtxzxw 发表于 2008-3-14 23:09 | 显示全部楼层

嘿嘿

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

本版积分规则

28

主题

66

帖子

0

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