|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
TMS320F240的DEMO板子上的C語言串行通信程序,進(jìn)不去中斷。 |
| 作者:iehome 欄目:DSP技術(shù) |
我編寫了下面這個(gè)C語言通信程序,由于還要和PC機(jī)聯(lián)系,我先只是想用TMS320F240的DEMO板子上的LEDS來測(cè)試一下,編譯沒有問題,但是進(jìn)不去中斷的問題(查*SYSIVR老是等于0),在反匯編窗口中老是停在一個(gè)abort段的跳轉(zhuǎn)語句上。 #include "f240regc.h" #include "ioports.h" #define LEDS port000C ioport unsigned port000C; void initial() { *IFR=0x0ffff; asm(" setc SXM"); asm(" clrc OVM"); asm(" clrc CNF"); *CKCR1=0x00BB; *CKCR0=0x00C3; *SYSCR=0x40C0; *WDCR =0x006F; } void sci_init() { *SCICCR=0x17; /*8個(gè)數(shù)據(jù)位,1個(gè)停止位,使能SCI */ *SCICTL1=0x13; /*使能發(fā)送和接收,使用內(nèi)部時(shí)鐘,禁止SLEEP*/ *SCICTL2=0x03; /*響應(yīng)RX中斷,TX中斷 */ *SCIHBAUD=0x00; *SCILBAUD=0x40; /*19200bps */ *SCIPC2=0x22; /*使能TXD和RXD */ *SCIPRI=0x00; /*高優(yōu)先級(jí)中斷 */ *SCICTL1=0x33; } void interrupt INT1_ISR() //中斷服務(wù)程序 { if(*SYSIVR==6) if(*SCIRXBUF==55) //測(cè)試數(shù)據(jù)是不是已經(jīng)收到了 LEDS=0x0AA; } main() { disable(); //關(guān)總中斷 *IMR=0x01; //允許INT1中斷 initial(); kick_dog(); sci_init(); enable(); *SCITXBUF=55; while(*SCICTL2 & 0x80); //測(cè)試數(shù)據(jù)有沒有發(fā)送成功了 } 這個(gè)程序是我參考DSP的一個(gè)匯編程序?qū)懙模▍R編能調(diào)通的),初始化應(yīng)該沒有問題,我只是將下面幾句匯編 WAIT_TX: LDP #(SCICTL2/128) BIT SCICTL2,BIT7 BCND WAIT_TX,NTC LDP #00H LOOP: B LOOP 改成C語言 while(*SCICTL2 & 0x80); 這樣的效果等同嗎?(另外,中斷也改寫了,但現(xiàn)在中斷進(jìn)不去)。問題出在那里呢? |
| 2樓: | >>參與討論 |
| 作者: kramer 于 2005/9/29 10:17:00 發(fā)布:
是不是中斷寄存器名寫錯(cuò)了! if(*SYSIVR==6) 應(yīng)該是PIVR吧 |
|
| 3樓: | >>參與討論 |
| 作者: iehome 于 2005/10/4 21:46:00 發(fā)布:
現(xiàn)在好了 現(xiàn)在好了,檢查頭文件中所用的模塊的寄存器地址,才知道SCITXBUF的地址錯(cuò)了。ɑ宋液荛L時(shí)間) |
|
| 4樓: | >>參與討論 |
| 作者: iehome 于 2005/10/4 22:18:00 發(fā)布:
接受程序 現(xiàn)在的問題是:240通過調(diào)試助手發(fā)送程序很正常,但卻不能收到調(diào)試助手發(fā)送的字符。在查看窗口里,明明是*SYSIVR=6,也就是進(jìn)來接收中斷了,這又是為什么呢? 我的部分接受程序如下: void Uartrec( ) { static int receive[10]; static int j=0; receive[j++]=*SCIRXBUF; if(j>9)j = 0; *IFR=0x0010; } |
|
|
|
| 免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |