AT91SAM7S64大量数据传输时的中断问题?求助

[复制链接]
3639|7
 楼主| 边城浪子 发表于 2008-4-16 20:04 | 显示全部楼层 |阅读模式
现同时用到AT91SAM7S64的两个串口,单独地收发、一个做收一个做发时都很稳定。但两个串口同时都处于收发时就会有一个串口收不到数据。<br />请问有什么需要注意的?中断处理,清中断上有什么讲究?先谢了!
armecos 发表于 2008-4-16 21:12 | 显示全部楼层

是不是处理不过来了?按理几个全双工串口同时工作也不会

 楼主| 边城浪子 发表于 2008-4-16 23:28 | 显示全部楼层

把程序贴出来,多位有时间的话帮看看,搞不定了!

&nbsp;&nbsp;&nbsp;整个系统的工作模式是做一个通信中转,将一个串口接收到的数据从另一个串口发送出去。<br />&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;当工作在全双工时,时间一长就会出问题,其中一个串口会接收不到数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;请问:中断处理上,和初始化上有什么需要注意的?<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;两个串口的程序差不多,&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />*/<br />/*<br />*&nbsp;&nbsp;&nbsp;初始串口0<br />*/<br />void&nbsp;Usart0_init(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;extern&nbsp;AT91S_PIO&nbsp;*&nbsp;pPIO&nbsp;&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;&nbsp;long&nbsp;statu;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Com0RecBLengA&nbsp;=&nbsp;0&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Com0RecBLengB&nbsp;=&nbsp;0&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Com0RecOK&nbsp;=&nbsp;0&nbsp;;<br />&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;Disable&nbsp;all&nbsp;interrupt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;pPIO-&gtPIO_ASR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91C_PA5_RXD0|AT91C_PA6_TXD0;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;&nbsp;set&nbsp;&nbsp;rxd&nbsp;txd&nbsp;pin&nbsp;contral&nbsp;by&nbsp;pers&nbsp;&nbsp;A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;pPIO-&gtPIO_BSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;pPIO-&gtPIO_PDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91C_PA5_RXD0|AT91C_PA6_TXD0;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Disable&nbsp;RXD&nbsp;and&nbsp;TXD&nbsp;pin&nbsp;controler&nbsp;&nbsp;by&nbsp;PIO&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_PMC-&gtPMC_PCER&nbsp;=&nbsp;(1&nbsp;&lt&lt&nbsp;AT91C_ID_US0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;enable&nbsp;the&nbsp;clock&nbsp;of&nbsp;the&nbsp;PIOA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_US0-&gtUS_IDR&nbsp;=&nbsp;0xf3fff;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;&nbsp;reset&nbsp;receive&nbsp;and&nbsp;transmitter,&nbsp;&nbsp;disable&nbsp;receive&nbsp;and&nbsp;transmitter&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_US0-&gtUS_CR&nbsp;=&nbsp;AT91C_US_RSTRX|AT91C_US_RSTTX|AT91C_US_RXDIS|AT91C_US_TXDIS&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_US0-&gtUS_RCR&nbsp;=&nbsp;&nbsp;0&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;clear&nbsp;receive&nbsp;counter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_US0-&gtUS_TCR&nbsp;=&nbsp;&nbsp;0&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;clear&nbsp;transmit&nbsp;counter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_US0-&gtUS_BRGR&nbsp;=&nbsp;AT91F_US_Baudrate(SYS_MCK,&nbsp;57600)&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Define&nbsp;the&nbsp;baud&nbsp;rate&nbsp;divisor&nbsp;register&nbsp;*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Define&nbsp;the&nbsp;USART&nbsp;mode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SYNC&nbsp;=&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;OVER&nbsp;=&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;baud&nbsp;=&nbsp;mck/div/16/BRGR&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_US0-&gtUS_MR&nbsp;=&nbsp;AT91C_US_USMODE_NORMAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;&nbsp;&nbsp;normal&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;|AT91C_US_CLKS_CLOCK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;&nbsp;&nbsp;mck/div&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;|AT91C_US_CHRL_8_BITS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;bit&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;|AT91C_US_PAR_EVEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;&nbsp;&nbsp;EVEN&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;|AT91C_US_NBSTOP_1_BIT&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;&nbsp;&nbsp;one&nbsp;stop&nbsp;bit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_US0-&gtUS_TTGR&nbsp;=&nbsp;0&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Write&nbsp;the&nbsp;Timeguard&nbsp;Register&nbsp;*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//*&nbsp;Enable&nbsp;receiver&nbsp;and&nbsp;transmitter<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_US0-&gtUS_CR&nbsp;=&nbsp;AT91C_US_RXEN&nbsp;|&nbsp;AT91C_US_TXEN&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_US0-&gtUS_RTOR=&nbsp;0&nbsp;;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_US0-&gtUS_PTCR&nbsp;=&nbsp;AT91C_PDC_RXTDIS&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_US0-&gtUS_PTCR&nbsp;=&nbsp;AT91C_PDC_TXTDIS&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_US0-&gtUS_TNPR&nbsp;=&nbsp;0&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_US0-&gtUS_TNCR&nbsp;=&nbsp;0&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_US0-&gtUS_RNPR&nbsp;=&nbsp;0&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_US0-&gtUS_RNCR&nbsp;=&nbsp;0&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_US0-&gtUS_TPR&nbsp;=&nbsp;0&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_US0-&gtUS_TCR&nbsp;=&nbsp;0&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_US0-&gtUS_RPR&nbsp;=&nbsp;(unsigned&nbsp;int)Com0RecBufA&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;Com0RecBufDex&nbsp;=&nbsp;0&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_US0-&gtUS_RCR&nbsp;=&nbsp;COM0_REC_BUFFER_LENGTH&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_US0-&gtUS_RTOR&nbsp;=&nbsp;10&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_US0-&gtUS_PTCR&nbsp;=&nbsp;AT91C_PDC_RXTEN&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_US0-&gtUS_PTCR&nbsp;=&nbsp;AT91C_PDC_TXTEN&nbsp;;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;USART&nbsp;IRQ&nbsp;open&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Global&nbsp;UART&nbsp;&nbsp;Interrupt:&nbsp;Mode&nbsp;and&nbsp;Vector&nbsp;with&nbsp;Highest&nbsp;Priority&nbsp;and&nbsp;Enable&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_AIC-&gtAIC_IDCR&nbsp;=&nbsp;(1&nbsp;&lt&lt&nbsp;AT91C_ID_US0);&nbsp;&nbsp;//&nbsp;enable&nbsp;interrupt<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_AIC-&gtAIC_SMR[AT91C_ID_US0]&nbsp;=&nbsp;AT91C_AIC_SRCTYPE_INT_EDGE_TRIGGERED&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91C_AIC_PRIOR_HIGHEST;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_AIC-&gtAIC_SVR[AT91C_ID_US0]&nbsp;=&nbsp;(unsigned&nbsp;long)&nbsp;USART0_ISR;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_AIC-&gtAIC_IECR&nbsp;=&nbsp;(1&nbsp;&lt&lt&nbsp;AT91C_ID_US0);&nbsp;&nbsp;//&nbsp;enable&nbsp;interrupt<br />&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_AIC-&gtAIC_ICCR&nbsp;=&nbsp;(1&nbsp;&lt&lt&nbsp;AT91C_ID_US0);&nbsp;&nbsp;//&nbsp;clear&nbsp;interrupt<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;statu&nbsp;=&nbsp;AT91C_BASE_AIC-&gtAIC_IMR&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;statu&nbsp;=&nbsp;AT91C_BASE_AIC-&gtAIC_IPR&nbsp;;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;AT91C_BASE_US0-&gtUS_IER=AT91C_US_TIMEOUT|AT91C_US_RXBUFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;statu&nbsp;=&nbsp;AT91C_BASE_US0-&gtUS_IMR;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />int&nbsp;&nbsp;&nbsp;Usart0_send_frame&nbsp;(unsigned&nbsp;char&nbsp;*&nbsp;pbuffer,&nbsp;short&nbsp;&nbsp;bufsize&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;while((pUART0-&gtUS_CSR&nbsp;&&nbsp;US_ENDTX&nbsp;)&nbsp;==&nbsp;0)&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;Wait&nbsp;for&nbsp;previous&nbsp;transfer&nbsp;finished&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pUART0-&gtUS_TPR&nbsp;=&nbsp;(unsigned&nbsp;int)pbuffer&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Store&nbsp;the&nbsp;address&nbsp;of&nbsp;the&nbsp;buffer&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pUART0-&gtUS_TCR&nbsp;=&nbsp;bufsize&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;TRUE&nbsp;&nbsp;;<br />}<br /><br /><br />void&nbsp;USART0_Handler(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;&nbsp;long&nbsp;statu,length;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*AT91C_AIC_EOICR&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;End&nbsp;of&nbsp;Interrupt&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;statu&nbsp;=&nbsp;pUART0-&gtUS_CSR&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;get&nbsp;the&nbsp;channel&nbsp;status&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;length&nbsp;=&nbsp;pUART0-&gtUS_RCR&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;statu&nbsp;&&nbsp;(AT91C_US_TIMEOUT|AT91C_US_RXBUFF))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Com0RecBufDex&nbsp;==&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Com0RecBufDex&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pUART0-&gtUS_RPR&nbsp;=&nbsp;(unsigned&nbsp;int)&nbsp;Com0RecBufB;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pUART0-&gtUS_RCR&nbsp;=&nbsp;COM0_REC_BUFFER_LENGTH;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Com0RecBLengA&nbsp;=&nbsp;COM0_REC_BUFFER_LENGTH&nbsp;-&nbsp;length&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Com0RecOK&nbsp;=&nbsp;1&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Com0RecBufDex&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pUART0-&gtUS_RPR&nbsp;=&nbsp;(unsigned&nbsp;int)&nbsp;Com0RecBufA;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pUART0-&gtUS_RCR&nbsp;=&nbsp;COM0_REC_BUFFER_LENGTH;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Com0RecBLengB&nbsp;=&nbsp;COM0_REC_BUFFER_LENGTH&nbsp;-&nbsp;length&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Com0RecOK&nbsp;=&nbsp;1&nbsp;;<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;pUART0-&gtUS_CR&nbsp;=&nbsp;&nbsp;AT91C_US_STTTO;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;pUART0-&gtUS_CR&nbsp;=&nbsp;AT91C_US_RSTSTA;<br />}<br /><br /><br />USART0_ISR<br /><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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r14,&nbsp;r14,&nbsp;#4<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;&nbsp;&nbsp;&nbsp;&nbsp;stmfd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sp!,&nbsp;{r14}<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;&nbsp;&nbsp;&nbsp;&nbsp;mrs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r14,&nbsp;spsr<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;&nbsp;&nbsp;&nbsp;&nbsp;stmfd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sp!,&nbsp;{r0,r14}&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mrs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r14,&nbsp;cpsr<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;&nbsp;&nbsp;&nbsp;&nbsp;bic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r14,&nbsp;r14,&nbsp;#I_Bit<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;&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r14,&nbsp;r14,&nbsp;#Mode_SVC<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;&nbsp;&nbsp;&nbsp;&nbsp;msr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpsr_cxsf,&nbsp;r14<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;&nbsp;&nbsp;&nbsp;&nbsp;stmfd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sp!,&nbsp;{&nbsp;r0-r12,&nbsp;r14}<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;USART0_Handler&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;&nbsp;&nbsp;&nbsp;&nbsp;ldmia&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sp!,&nbsp;{&nbsp;r0-r12,&nbsp;r14}&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mrs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;cpsr<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;&nbsp;&nbsp;&nbsp;&nbsp;bic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;r0,&nbsp;#Mode_SVC<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;&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;r0,&nbsp;#I_Bit:OR:Mode_IRQ<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;&nbsp;&nbsp;&nbsp;&nbsp;msr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpsr_cxsf,&nbsp;r0<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;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;=AIC_BASE<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;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;[r0,&nbsp;#AIC_EOICR]<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;&nbsp;&nbsp;&nbsp;&nbsp;ldmia&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sp!,&nbsp;{r0,r14}<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;&nbsp;&nbsp;&nbsp;&nbsp;msr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spsr_cxsf,&nbsp;r14<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;&nbsp;&nbsp;&nbsp;&nbsp;ldmia&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sp!,&nbsp;{pc}^&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 楼主| 边城浪子 发表于 2008-4-16 23:30 | 显示全部楼层

应该处理得过来,AT91SARM7S64就干这一点事

两边大约都是每200mS发送20来个byte
xhtxzxw 发表于 2008-4-17 01:56 | 显示全部楼层

嘿嘿

调用AT91F_US_Baudrate(SYS_MCK,&nbsp;57600)设置波特率,系统主时钟SYS_MCK的频率和USx的波特率57600是否匹配啊?<br />给回来的值要设置给US_BRGR寄存器的,如果误差大了,就容易出错的。
xhtxzxw 发表于 2008-4-17 02:09 | 显示全部楼层

??

为啥不把USART0_Handler(void)直接设置成中断服务函数?为啥还要从汇编码子里跳一下啊?
 楼主| 边城浪子 发表于 2008-4-17 11:31 | 显示全部楼层

。。

波特率应该是对的,汇编主要是为了保存寄存器。<br /><br />清中断有无问题?如果一个串口进入中断,另一个串口的中断来了,会不会出问题?
armecos 发表于 2008-4-17 13:47 | 显示全部楼层

写得太乱了,看不下去,

ecos里有AT91的串口驱动源码,中断驱动源码也有,你可以参考一下。<br /><br />串口和中断都是非常成熟的技术,你参加一次我们的基础培训就全明白了,光这么回复其实没什么用,因为你的代码本身结构就差,很多细节没有注意到,也许根本就不知道,在这个基础上修补没意义。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

15

帖子

0

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