都是中断为甚么用bios实现就不行?搞不出来下个月就要被辞

[复制链接]
5048|15
 楼主| ccjchen 发表于 2009-6-24 16:29 | 显示全部楼层 |阅读模式
我用普通的中断方式实现uart串口通信可以,&nbsp;<br />但用bios&nbsp;方式中断却没有中断产生不知为什么?<br />恳请各位高手给指点一下!万分感激!<br />公司买的开发板,在上面做DM642做UART串口通信实验。它是由一个外围芯片TL16C752B提供两个中断请求信号INTA、INTB分别用于通道A和B申请TMS320DM642的中断。在DM642中,INTA和ITB相与,复用DM642的INT5.<br />大家帮看一下哪里bios写的程序哪里存在问题?<br />这是普通方式实现的程序:<br />#include&nbsp;&ltcsl.h&gt<br />#include&nbsp;&ltcsl_emifa.h&gt<br />#include&nbsp;&ltcsl_irq.h&gt<br />#include&nbsp;&ltcsl_chip.h&gt<br />#include&nbsp;&quot;stdio.h&quot;<br /><br />#include&nbsp;&quot;seeddm642.h&quot;<br />#include&nbsp;&quot;seeddm642_uart.h&quot;<br /><br />/*SEEDDM642的emifa的设置结构*/<br />EMIFA_Config&nbsp;Seeddm642ConfigA&nbsp;={<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00052078,/*gblctl&nbsp;EMIFA(B)global&nbsp;control&nbsp;register&nbsp;value&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*将CLK6、4、1使能;将MRMODE置1;使能EK2EN,EK2RATE*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xffffffd3,/*cectl0&nbsp;CE0&nbsp;space&nbsp;control&nbsp;register&nbsp;value*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*将CE0空间设为SDRAM*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x73a28e01,/*cectl1&nbsp;CE1&nbsp;space&nbsp;control&nbsp;register&nbsp;value*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*Read&nbsp;hold:&nbsp;1&nbsp;clock;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MTYPE&nbsp;:&nbsp;0000,选择8位的异步接口<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Read&nbsp;strobe&nbsp;:001110;14个clock宽度<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TA:2&nbsp;clock;&nbsp;Read&nbsp;setup&nbsp;2&nbsp;clock;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Write&nbsp;hold&nbsp;:2&nbsp;clock;&nbsp;Write&nbsp;strobe:&nbsp;14&nbsp;clock<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Write&nbsp;setup&nbsp;:7&nbsp;clock<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;---------------<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;14c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/1c<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;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x22a28a22,&nbsp;/*cectl2&nbsp;CE2&nbsp;space&nbsp;control&nbsp;register&nbsp;value*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x22a28a42,&nbsp;/*cectl3&nbsp;CE3&nbsp;space&nbsp;control&nbsp;register&nbsp;value*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x57115000,&nbsp;/*sdctl&nbsp;SDRAM&nbsp;control&nbsp;register&nbsp;value*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0000081b,&nbsp;/*sdtim&nbsp;SDRAM&nbsp;timing&nbsp;register&nbsp;value*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x001faf4d,&nbsp;/*sdext&nbsp;SDRAM&nbsp;extension&nbsp;register&nbsp;value*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000002,&nbsp;/*cesec0&nbsp;CE0&nbsp;space&nbsp;secondary&nbsp;control&nbsp;register&nbsp;value*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000002,&nbsp;/*cesec1&nbsp;CE1&nbsp;space&nbsp;secondary&nbsp;control&nbsp;register&nbsp;value*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000002,&nbsp;/*cesec2&nbsp;CE2&nbsp;space&nbsp;secondary&nbsp;control&nbsp;register&nbsp;value*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000073&nbsp;/*cesec3&nbsp;CE3&nbsp;space&nbsp;secondary&nbsp;control&nbsp;register&nbsp;value*/&nbsp;&nbsp;&nbsp;&nbsp;<br />};<br /><br />SEEDDM642_UART_Config&nbsp;UartConfig&nbsp;={<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x01,/*寄存器IER*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x57,/*寄存器FCR*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x03,/*寄存器LCR*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x08,/*寄存器MCR*/<br />};<br /><br />extern&nbsp;far&nbsp;void&nbsp;vectors();<br /><br />Uint8&nbsp;IOreadback;<br />Uint16&nbsp;buffer;<br />SEEDDM642_UART_Handle&nbsp;SEEDuartHandleA;<br />SEEDDM642_UART_Handle&nbsp;SEEDuartHandleB;<br /><br />/*此程序可将四个采集口的数据经过Video&nbsp;Port0送出*/<br />void&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />/*-------------------------------------------------------*/<br />/*&nbsp;perform&nbsp;all&nbsp;initializations&nbsp;&nbsp;&nbsp;&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 />/*-------------------------------------------------------*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*Initialise&nbsp;CSL,初始化CSL库*/<br />&nbsp;&nbsp;&nbsp;&nbsp;CSL_init();<br />/*----------------------------------------------------------*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*EMIFA的初始化,将CE0设为SDRAM空间,CE1设为异步空间<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注,DM642支持的是EMIFA,而非EMIF*/<br />&nbsp;&nbsp;&nbsp;&nbsp;EMIFA_config(&Seeddm642ConfigA);<br />/*----------------------------------------------------------*/<br />&nbsp;&nbsp;&nbsp;&nbsp;IRQ_globalDisable();<br />&nbsp;&nbsp;&nbsp;&nbsp;//IRQ_reset(IRQ_EVT_EXTINT5);<br />&nbsp;&nbsp;&nbsp;&nbsp;IRQ_nmiEnable();<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IRQ_enable(IRQ_EVT_EXTINT5);<br />&nbsp;&nbsp;&nbsp;&nbsp;IRQ_globalEnable();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*中断向量表的初始化*/<br />&nbsp;&nbsp;&nbsp;&nbsp;//Point&nbsp;to&nbsp;the&nbsp;IRQ&nbsp;vector&nbsp;table<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;<br />/*测试串口A*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Open&nbsp;UART&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;SEEDuartHandleA&nbsp;=&nbsp;SEEDDM642_UART_open(SEEDDM642_UARTA,&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;SEEDDM642_UART_BAUD9600,&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;&UartConfig);<br />&nbsp;&nbsp;&nbsp;&nbsp;/*Open&nbsp;UARTB*/<br />&nbsp;&nbsp;&nbsp;&nbsp;SEEDuartHandleB&nbsp;=&nbsp;SEEDDM642_UART_open(SEEDDM642_UARTB,&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;SEEDDM642_UART_BAUD9600,&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;&UartConfig);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IRQ_setVecs(vectors);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;Uart&nbsp;Test&nbsp;Begin...
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Loop&nbsp;through&nbsp;256&nbsp;bytes&nbsp;*/<br />&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;for&nbsp;(;;)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer&nbsp;=&nbsp;SEEDDM642_UART_getChar(SEEDuartHandleA);<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;buffer&nbsp;&nbsp;=&nbsp;0x55;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SEEDDM642_UART_putChar(SEEDuartHandleA,&nbsp;(buffer&nbsp;&&nbsp;0xff));&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;}*/<br />&nbsp;&nbsp;&nbsp;while(1);<br /><br />}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;interrupt&nbsp;void&nbsp;uart_isr(void)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Uint16&nbsp;Data_Temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Data_Temp&nbsp;=&nbsp;SEEDDM642_UART_rget(SEEDuartHandleA,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;DATA&nbsp;:&nbsp;%x
&quot;,Data_Temp);<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br /><br /><br /><br />下面为用bios方式写的程序:<br />#include&nbsp;&ltcsl.h&gt<br />#include&nbsp;&ltcsl_emifa.h&gt<br />#include&nbsp;&ltcsl_irq.h&gt<br />#include&nbsp;&ltcsl_chip.h&gt<br />#include&nbsp;&quot;stdio.h&quot;<br /><br />#include&nbsp;&quot;seeddm642.h&quot;<br />#include&nbsp;&quot;seeddm642_uart.h&quot;<br /><br />/*SEEDDM642的emifa的设置结构*/<br />EMIFA_Config&nbsp;Seeddm642ConfigA&nbsp;={<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00052078,/*gblctl&nbsp;EMIFA(B)global&nbsp;control&nbsp;register&nbsp;value&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*将CLK6、4、1使能;将MRMODE置1;使能EK2EN,EK2RATE*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xffffffd3,/*cectl0&nbsp;CE0&nbsp;space&nbsp;control&nbsp;register&nbsp;value*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*将CE0空间设为SDRAM*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x73a28e01,/*cectl1&nbsp;CE1&nbsp;space&nbsp;control&nbsp;register&nbsp;value*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*Read&nbsp;hold:&nbsp;1&nbsp;clock;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MTYPE&nbsp;:&nbsp;0000,选择8位的异步接口<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Read&nbsp;strobe&nbsp;:001110;14个clock宽度<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TA:2&nbsp;clock;&nbsp;Read&nbsp;setup&nbsp;2&nbsp;clock;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Write&nbsp;hold&nbsp;:2&nbsp;clock;&nbsp;Write&nbsp;strobe:&nbsp;14&nbsp;clock<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Write&nbsp;setup&nbsp;:7&nbsp;clock<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;---------------<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;14c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/1c<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;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x22a28a22,&nbsp;/*cectl2&nbsp;CE2&nbsp;space&nbsp;control&nbsp;register&nbsp;value*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x22a28a42,&nbsp;/*cectl3&nbsp;CE3&nbsp;space&nbsp;control&nbsp;register&nbsp;value*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x57115000,&nbsp;/*sdctl&nbsp;SDRAM&nbsp;control&nbsp;register&nbsp;value*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0000081b,&nbsp;/*sdtim&nbsp;SDRAM&nbsp;timing&nbsp;register&nbsp;value*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x001faf4d,&nbsp;/*sdext&nbsp;SDRAM&nbsp;extension&nbsp;register&nbsp;value*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000002,&nbsp;/*cesec0&nbsp;CE0&nbsp;space&nbsp;secondary&nbsp;control&nbsp;register&nbsp;value*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000002,&nbsp;/*cesec1&nbsp;CE1&nbsp;space&nbsp;secondary&nbsp;control&nbsp;register&nbsp;value*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000002,&nbsp;/*cesec2&nbsp;CE2&nbsp;space&nbsp;secondary&nbsp;control&nbsp;register&nbsp;value*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000073&nbsp;/*cesec3&nbsp;CE3&nbsp;space&nbsp;secondary&nbsp;control&nbsp;register&nbsp;value*/&nbsp;&nbsp;&nbsp;&nbsp;<br />};<br /><br />SEEDDM642_UART_Config&nbsp;UartConfig&nbsp;={<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x01,/*寄存器IER*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x57,/*寄存器FCR*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x03,/*寄存器LCR*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x08,/*寄存器MCR*/<br />};<br /><br />extern&nbsp;far&nbsp;void&nbsp;vectors();<br /><br />Uint8&nbsp;IOreadback;<br />Uint16&nbsp;buffer;<br />SEEDDM642_UART_Handle&nbsp;SEEDuartHandleA;<br />SEEDDM642_UART_Handle&nbsp;SEEDuartHandleB;<br /><br />/*此程序可将四个采集口的数据经过Video&nbsp;Port0送出*/<br />void&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />/*-------------------------------------------------------*/<br />/*&nbsp;perform&nbsp;all&nbsp;initializations&nbsp;&nbsp;&nbsp;&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 />/*-------------------------------------------------------*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*Initialise&nbsp;CSL,初始化CSL库*/<br />&nbsp;&nbsp;&nbsp;&nbsp;CSL_init();<br />/*----------------------------------------------------------*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*EMIFA的初始化,将CE0设为SDRAM空间,CE1设为异步空间<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注,DM642支持的是EMIFA,而非EMIF*/<br />&nbsp;&nbsp;&nbsp;&nbsp;EMIFA_config(&Seeddm642ConfigA);<br />/*----------------------------------------------------------*/<br />&nbsp;&nbsp;&nbsp;&nbsp;IRQ_globalDisable();<br />&nbsp;&nbsp;&nbsp;&nbsp;IRQ_Reset(IRQ_EVT_EXTINT5);<br />&nbsp;&nbsp;&nbsp;&nbsp;IRQ_nmiEnable();<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IRQ_enable(IRQ_EVT_EXTINT5);<br />&nbsp;&nbsp;&nbsp;&nbsp;IRQ_globalEnable();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*中断向量表的初始化*/<br />&nbsp;&nbsp;&nbsp;&nbsp;//Point&nbsp;to&nbsp;the&nbsp;IRQ&nbsp;vector&nbsp;table<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;<br />/*测试串口A*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Open&nbsp;UART&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;SEEDuartHandleA&nbsp;=&nbsp;SEEDDM642_UART_open(SEEDDM642_UARTA,&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;SEEDDM642_UART_BAUD9600,&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;&UartConfig);<br />&nbsp;&nbsp;&nbsp;&nbsp;/*Open&nbsp;UARTB*/<br />&nbsp;&nbsp;&nbsp;&nbsp;SEEDuartHandleB&nbsp;=&nbsp;SEEDDM642_UART_open(SEEDDM642_UARTB,&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;SEEDDM642_UART_BAUD9600,&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;&UartConfig);<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;Uart&nbsp;Test&nbsp;Begin...
&quot;);<br /><br />}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;interrupt&nbsp;void&nbsp;uart_isr(void)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Uint16&nbsp;Data_Temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Data_Temp&nbsp;=&nbsp;SEEDDM642_UART_rget(SEEDuartHandleA,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;DATA&nbsp;:&nbsp;%x
&quot;,Data_Temp);<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />
yxwsz 发表于 2009-6-24 23:28 | 显示全部楼层

你的程序不死才怪

在ISR里面使用printf,不出问题才怪。<br />如果我在你后面,一定会往你屁股上踢一脚。
 楼主| ccjchen 发表于 2009-6-25 09:00 | 显示全部楼层

谢谢,yxwsz!不过我的程序好像根本就没进中断啊

在ISR中为什么不能用Printf,我看到一个非bios例程中,isr中就有Printf,难道bios编程里不能使用吗?
 楼主| ccjchen 发表于 2009-6-25 09:42 | 显示全部楼层

在ISR里面把printf去掉还是不行

为什么不用bios中断就非常正常呢?还请高人给小弟指点一下!<br />就算不在这个公司我也想知道这是为什么?以后还要靠它吃饭呢!
 楼主| ccjchen 发表于 2009-6-25 10:20 | 显示全部楼层

万分感激yxwsz!

确实不能在bios里面加printf函数,现在去掉就好了!<br />妈的,整了我一个月,终于出来了!<br />你真是伟大的导师啊!<br />给解释一下bios的isr中为什么不能加printf函数好吗?
northelec.com 发表于 2009-6-25 11:45 | 显示全部楼层

bios设置:BIOS中断

AL=00&nbsp;40×25黑白方式<br />AL=01&nbsp;40×25彩色方式<br />AL=02&nbsp;80×25黑白方式<br />AL=03&nbsp;80×25彩色方式<br />AL=04&nbsp;320×200彩色图形方式<br />AL=05&nbsp;320×200黑白图形方式<br />AL=06&nbsp;320×200黑白图形方式<br />AL=07&nbsp;80×25单色文本方式<br />AL=08&nbsp;160×200&nbsp;16色图形&nbsp;(PCjr)<br />AL=09&nbsp;320×200&nbsp;16色图形&nbsp;(PCjr)<br />AL=0A&nbsp;640×200&nbsp;16色图形&nbsp;(PCjr)<br />AL=0B&nbsp;保留(EGA)<br />AL=0C&nbsp;保留(EGA)<br />AL=0D&nbsp;320×200&nbsp;彩色图形&nbsp;(EGA)<br />AL=0E&nbsp;640×200&nbsp;彩色图形&nbsp;(EGA)<br />AL=0F&nbsp;640×350&nbsp;黑白图形&nbsp;(EGA)<br />AL=10&nbsp;640×350&nbsp;彩色图形&nbsp;(EGA)<br />AL=11&nbsp;640×480&nbsp;单色图形&nbsp;(EGA)<br />AL=12&nbsp;640×480&nbsp;16色图形&nbsp;(EGA)<br />AL=13&nbsp;320×200&nbsp;256色图形&nbsp;(EGA)<br />AL=40&nbsp;80×30&nbsp;彩色文本(CGE400)<br />AL=41&nbsp;80×50&nbsp;彩色文本(CGE400)<br />AL=42&nbsp;640×400&nbsp;彩色图形(CGE400)
northelec.com 发表于 2009-6-25 11:47 | 显示全部楼层

BIOS 中断调用表(INT n)

BIOS&nbsp;中断调用表(INT&nbsp;n)&nbsp;<br /><br />http://teacher.swun.edu.cn/teacher_manage/upload/2009042910263865.pdf <br /> 相关链接:<a href='http://teacher.swun.edu.cn/teacher_manage/upload/2009042910263865.pdf'>http://teacher.swun.edu.cn/teacher_manage/upload/2009042910263865.pdf</a>
因特网用户 发表于 2009-6-25 12:36 | 显示全部楼层

mark

  
yidong1981 发表于 2009-6-25 12:50 | 显示全部楼层

如果用DSP/BIOS的话

那就最好不用printf(),DSP/BIOS提供了一个对应的函数:LOG_printf()
 楼主| ccjchen 发表于 2009-6-25 14:01 | 显示全部楼层

谢谢yidong1981

northelec.com搞的什么东西,看不懂啊。打广告的又不像
yxwsz 发表于 2009-6-25 14:25 | 显示全部楼层

printf是不可重入函数(non-reentrant)

printf是不可重入函数(non-reentrant);<br />并且很消耗CPU资源,你找个vsprintf的代码看看就清楚了;<br />很明显,UART中断频率非常高,因此在中断里面调用printf会很耗时;<br /><br />非多任务程序里面,如果使用了中断,相当于系统里面有两个任务:ISR、主程序;随时ISR随时会打断主程序的执行,如果主程序中也使用了printf,那printf很容易就重入了。<br />
 楼主| ccjchen 发表于 2009-6-26 13:34 | 显示全部楼层

谢谢 yxwsz!

学了不少!
jxin 发表于 2009-6-29 11:08 | 显示全部楼层

学习了学习了

  
bjc125 发表于 2009-7-8 11:14 | 显示全部楼层

Mark

最近也在研究DSP&nbsp;<br /><br />学习了
nealfei 发表于 2009-9-18 23:30 | 显示全部楼层
有些收获,谢谢各位!
原野牧歌 发表于 2009-9-23 15:37 | 显示全部楼层
学习了。还没有入门,哈哈。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

175

主题

446

帖子

1

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