用bios编写Hwi硬件中断函数还需要在主函数中加循环吗?

[复制链接]
4553|10
 楼主| ccjchen 发表于 2009-6-21 10:24 | 显示全部楼层 |阅读模式
过去编程时都要main主函数中都会有for或while&nbsp;循环,否则main函数只运行一次,就结束了<br />现在我手里面有个开发板供应商提供的用bios编写的network程序,用的是TSK_network任务函数。main()函数中没有for或while循环,如果在结尾加上比如while(1);程序就不能运行了<br />DSP/BIOS提供四种不同的线程:Hwi,Swi,Tsk,Idle;<br />请问各位高手是不是在bios编写的程序中不能有while(1)这种循环等待存在呢?还是只有Tsk不能,而Hwi可以呢?&nbsp;<br />
px99 发表于 2009-6-21 12:00 | 显示全部楼层

我的看法

根据实际需要,关键是自己要清楚自己的程序将要如何跑?
 楼主| ccjchen 发表于 2009-6-21 16:25 | 显示全部楼层

你说的很对啊,可惜我在这方面功力还不深

附件中的程序是开发板供应商提供的已经调试好的用于DM642的TCP/IP的NDK程序。在main()函数结尾为什么不能加while(1)循环呢?也不能加for循环进去。要往里继续加程序不好办啊,难道这就是多线程编程的缘故吗? <br /> 相关链接:<a href='https://bbs.21ic.com/upfiles/img/20096/200962116179664.rar'>https://bbs.21ic.com/upfiles/img/20096/200962116179664.rar</a>
px99 发表于 2009-6-21 19:58 | 显示全部楼层

添加个任务

在任务里添加程序代码
alex74 发表于 2009-6-21 21:55 | 显示全部楼层

千万别在main里面加

bios文档好好看看。注意看他的初始化流程。<br />main里面不能加死循环的。
hotpower 发表于 2009-6-21 22:09 | 显示全部楼层

main里一句话都可以不要,这是DSP Bios的特点

  
 楼主| ccjchen 发表于 2009-6-21 22:12 | 显示全部楼层

如果我要用到中断的话

是不是也得用bios添加中断才可以啊?<br />如果用bios添加中断的话,直接用bios中的HWI添加就可以了吧,还是需要用bios中的任务添加中断呢?
yidong1981 发表于 2009-6-22 08:46 | 显示全部楼层

dsp/BIOS的流程

如果使用了BIOS的话,那么main中只要完成一些初始化函数就可以了,如果main中加了死循环,那么就永远挑不出来,进入到任务调度了,那些Hwi,Swi,Tsk,Idle线程就得不到执行
yidong1981 发表于 2009-6-22 08:48 | 显示全部楼层

中断当然是在HWI中添加了

如果用bios添加中断的话,直接用bios中的HWI添加就可以了吧,还是需要用bios中的任务添加中断呢?<br />需要在HWI中添加中断处理函数
zhongxon 发表于 2009-6-22 09:06 | 显示全部楼层

re

在main.c中或在其他文件中的&nbsp;线程里面(TSK),如果有for或while做的无限循环,那么在循环当中就得有TSK_sleep(xx),否则程序一旦进入那个线程,就会出不来了。尽量不用while,或用消息等待机制。。。
 楼主| ccjchen 发表于 2009-6-22 11:26 | 显示全部楼层

我用普通的中断方式实现uart串口通信可以,

但用bios&nbsp;方式中断却没有中断产生不知为什么,下面这个程序有错吗?<br />我买的开发板,在上面做DM642做UART串口通信实验。它是由一个外围芯片TL16C752B提供两个中断请求信号INTA、INTB分别用于通道A和B申请TMS320DM642的中断。在DM642中,INTA和ITB相与,复用DM642的INT5.<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_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 /><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 />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

175

主题

446

帖子

1

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