[ZLG-MCU] 485通信程序不能进中断

[复制链接]
3877|9
 楼主| lujiang006 发表于 2008-4-2 17:14 | 显示全部楼层 |阅读模式
各位工程师帮忙啊!一个485发送数据的程序折磨几天了,都不见发出数据。前辈提点意见吧<br /><br />#include&nbsp;&quot;hw_ints.h&quot;<br />#include&nbsp;&quot;hw_memmap.h&quot;<br />#include&nbsp;&quot;hw_types.h&quot;<br />#include&nbsp;&quot;gpio.h&quot;<br />#include&nbsp;&quot;interrupt.h&quot;<br />#include&nbsp;&quot;sysctl.h&quot;<br />#include&nbsp;&quot;uart.h&quot;<br /><br />#define&nbsp;RE_DE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIO_PIN_7<br />#define&nbsp;UART1_PIN&nbsp;&nbsp;GPIO_PIN_2|GPIO_PIN_3<br /><br />static&nbsp;volatile&nbsp;const&nbsp;unsigned&nbsp;char&nbsp;*g_pucBuffer&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;发送数据缓冲区指针<br />static&nbsp;volatile&nbsp;unsigned&nbsp;long&nbsp;g_ulCount&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;发送数据个数<br />static&nbsp;const&nbsp;unsigned&nbsp;char&nbsp;g_pucString[]&nbsp;=&nbsp;&quot;123456789ABCDE&quot;;<br /><br />void&nbsp;WaitJTAG(void)<br />{<br />&nbsp;&nbsp;SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);<br />&nbsp;&nbsp;GPIOPinTypeGPIOInput(GPIO_PORTA_BASE,&nbsp;GPIO_PIN_2);<br />&nbsp;&nbsp;if&nbsp;(GPIOPinRead(GPIO_PORTA_BASE,&nbsp;GPIO_PIN_2)&nbsp;==&nbsp;0X00)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(;;);<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;SysCtlPeripheralDisable(SYSCTL_PERIPH_GPIOA);<br />}<br /><br />void&nbsp;UART1_ISR(void)&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;UART1中断服务函数<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;long&nbsp;ulStatus;<br />&nbsp;&nbsp;&nbsp;&nbsp;ulStatus&nbsp;=&nbsp;UARTIntStatus(UART1_BASE,&nbsp;true);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;获得中断状态。<br />&nbsp;&nbsp;&nbsp;&nbsp;UARTIntClear(UART1_BASE,&nbsp;ulStatus);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;清除等待响应的中断。<br />&nbsp;&nbsp;&nbsp;&nbsp;if(ulStatus&nbsp;&&nbsp;UART_INT_TX)&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;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(g_ulCount&nbsp;&&&nbsp;UARTSpaceAvail(UART1_BASE))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;处理传输中断。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UARTCharNonBlockingPut(UART1_BASE,&nbsp;*g_pucBuffer++);&nbsp;&nbsp;//&nbsp;发送下一个字符。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_ulCount--;&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;发送字符数自减。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br />void&nbsp;UARTSend(const&nbsp;unsigned&nbsp;char&nbsp;*pucBuffer,&nbsp;unsigned&nbsp;long&nbsp;ulCount)&nbsp;//&nbsp;发送数据处理函数<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(g_ulCount);&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;g_pucBuffer&nbsp;=&nbsp;pucBuffer;&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;保存待传输的数据缓冲。<br />&nbsp;&nbsp;&nbsp;&nbsp;g_ulCount&nbsp;=&nbsp;ulCount;&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;while(UARTSpaceAvail(UART1_BASE)&&g_ulCount)&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;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UARTCharNonBlockingPut(UART1_BASE,&nbsp;*g_pucBuffer++);&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;发送下一个字符。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_ulCount--;&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;&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;使能UART发送。<br />}<br /><br />int&nbsp;main(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;WaitJTAG();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SysCtlClockSet(SYSCTL_SYSDIV_1&nbsp;|&nbsp;SYSCTL_USE_OSC&nbsp;|&nbsp;SYSCTL_OSC_MAIN&nbsp;|<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SYSCTL_XTAL_6MHZ);&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;设置晶振为时钟源。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1);<br />&nbsp;&nbsp;&nbsp;&nbsp;SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);<br />&nbsp;&nbsp;&nbsp;&nbsp;SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);<br />&nbsp;&nbsp;&nbsp;&nbsp;GPIOPinTypeUART(GPIO_PORTD_BASE,&nbsp;UART1_PIN);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置PD2,PD3为RXD,TXD&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;GPIODirModeSet(GPIO_PORTC_BASE,&nbsp;RE_DE,&nbsp;GPIO_DIR_MODE_OUT);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置PC7为输出<br />&nbsp;&nbsp;&nbsp;&nbsp;GPIODirModeSet(GPIO_PORTD_BASE,&nbsp;UART1_PIN,&nbsp;GPIO_DIR_MODE_HW);&nbsp;//&nbsp;设置PD2和PD3为UART引脚输出<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;&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;(PD2-&gtRXD,PD3-&gtTXD)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;UARTConfigSet(UART1_BASE,&nbsp;9600,&nbsp;(UART_CONFIG_WLEN_8&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;配置UART&nbsp;为&nbsp;9600波特率,&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UART_CONFIG_STOP_ONE&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;8-N-1模式发送数据。<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;UART_CONFIG_PAR_NONE)&nbsp;&&nbsp;0xFFFFFFEF);&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IntMasterEnable();&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;&nbsp;&nbsp;//&nbsp;使能处理器中断<br />&nbsp;&nbsp;&nbsp;&nbsp;GPIOPinWrite(GPIO_PORTC_BASE,&nbsp;RE_DE,&nbsp;0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置PC7为低电平<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;&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;UARTIntEnable(UART1_BASE,&nbsp;UART_INT_TX);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;使能UART1发送中断<br />&nbsp;&nbsp;&nbsp;&nbsp;IntEnable(INT_UART1);<br />//&nbsp;&nbsp;&nbsp;&nbsp;UARTEnable(UART1_BASE);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;GPIOPinWrite(GPIO_PORTC_BASE,&nbsp;RE_DE,&nbsp;RE_DE);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;将RS485设置为发送模式<br />&nbsp;&nbsp;&nbsp;&nbsp;UARTSend(g_pucString,&nbsp;sizeof&nbsp;(g_pucString)&nbsp;-&nbsp;1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;向UART发送一个字符串。&nbsp;&nbsp;<br />}<br />
zlgmcu 发表于 2008-4-3 08:34 | 显示全部楼层

main()函数最后要加个死循环

(zlgmcu_wdx)
molink 发表于 2011-8-28 14:52 | 显示全部楼层
FVJFIFE 发表于 2011-8-30 16:28 | 显示全部楼层
这个应该是常识吧
年轻不再 发表于 2011-9-21 21:59 | 显示全部楼层
围观了。
明天我还来 发表于 2011-9-27 12:28 | 显示全部楼层
多接触就好了。
coco11 发表于 2011-10-24 14:18 | 显示全部楼层
:handshake
爱在2012 发表于 2011-10-25 21:36 | 显示全部楼层
路过学习一下。
jingbaobao 发表于 2011-11-24 21:06 | 显示全部楼层
mark 多看多看,jiuok。
FVJFIFE 发表于 2011-11-24 22:02 | 显示全部楼层
好多年前的帖子了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

18

帖子

0

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