音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

各位老大幫忙~~關(guān)于UART0接收中斷的一個比較郁悶的問題

作者:newtarget 欄目:ARM技術(shù)
各位老大幫忙~~關(guān)于UART0接收中斷的一個比較郁悶的問題
使用中斷方式接收UART0數(shù)據(jù),但是如果一次發(fā)送觸發(fā)點所設(shè)置的字節(jié)個數(shù)時,就會沒完沒了的觸發(fā)中斷,其實這個時候我什么也沒發(fā)。
比如我設(shè)置的觸發(fā)點為8個字節(jié),如果我一次發(fā)1~7個字節(jié),都沒問題,但是一次發(fā)8個字節(jié),就會不停的中斷N次,N大概是幾千次吧。
下面是我的程序關(guān)于UART0的片段,設(shè)置的是1字節(jié)觸發(fā),也就是說只要我一發(fā)就肯定沒完沒了的中斷。

這是初始化部分:

UART0_INI            
    STMFD    SP!,{LR}
    LDR    R0,=U0LCR        ;// 設(shè)置UART工作模式
    MOV    R1,#0x80        ;// DLAB = 1,可設(shè)置波特率
    STR    R1,[R0]                    
                    
    LDR    R0,=U0DLL        ;// 設(shè)置波特率
    MOV    R1,#(FPCLK/16/9600):MOD:256                
    STR    R1,[R0]    
    LDR    R0,=U0DLM                                
    MOV    R1,#(FPCLK/16/9600)/256    
    STR    R1,[R0]
                
    LDR    R0,=U0LCR                
    MOV    R1,#0x03    
    STR    R1,[R0]        ;// N81    
        
    LDR    R0,=U0FCR                
    MOV    R1,#0x01    
    STR    R1,[R0]
            
    LDR    R0,=U0IER                
    MOV    R1,#0x01    
    STR    R1,[R0]
            
    LDMFD    SP!,{PC}        ;// 返回    


這是中斷設(shè)置部分:

    LDR    R0,=VIC_BASE
    LDR    R1,=0x0
    STR    R1,[R0,#0x0C]    ;// VICIntSelect=0x00000000
    MOV    R1,#0x25
    STR    R1,[R0,#0x200]    ;// VICVectCntl0=0x25
    MOV    R1,#0x26
    STR    R1,[R0,#0x204]    ;// VICVectCntl1=0x26
    LDR    R1,=IRQ_TIME1
    STR    R1,[R0,#0x100]    ;// VICVectAddr0=(int)IRQ_TIME1
    LDR    R1,=IRQ_UART0
    STR    R1,[R0,#0x104]    ;// VICVectAddr1=(int)IRQ_UART0
    MOV    R1,#0x00000060
    STR    R1,[R0,#0x10]    ;// VICIntEnable=0x00000060        


這是中斷服務(wù)程序,每接收一字節(jié)就會發(fā)送回去:

IRQ_UART0
    STMFD    SP!,{R0-R7}
    
    LDR    R0,=U0RBR                
    LDR    R1,[R0]

    LDR    R0,=U0THR            
    STR    R1,[R0]        ; 發(fā)送數(shù)據(jù)

    LDR    R0,=U0LSR        ; 等待發(fā)送完畢
UART0_SEND_LOOP        
    LDR    R1,[R0]
    ANDS    R1,R1,#0x40
    BEQ    UART0_SEND_LOOP    
    
    LDR    R0,=VICVectAddr
    MOV    R1,#0
    STR    R1,[R0]                
    
    LDMFD    SP!,{R0-R7}
       SUBS    PC,LR,#4        ; IRQ中斷返回


郁悶啊,用光盤上的C程序就沒這問題,但是我覺得程序上沒問題啊。
現(xiàn)在必須用匯編,必須用中斷,所以這個問題必須解決。
各位老大幫忙!

2樓: >>參與討論
newtarget
暫時解決了
在中斷結(jié)束前加:
LDR    R0,=U0IIR                    
LDR    R1,[R0]
就可以了,仿佛是中斷被掛起了



參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
請教--lpc2131的模擬電源能否用5V供電
ARM 新手請教問題
請教ADS問題,哪位DX遇到過,謝謝!
請教:如何使用launch lpc210x_isp寫入程序
什么是調(diào)試代理軟件?
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號