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

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(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

UART0接收只能中斷一次??IRQEnable();

作者:zsdfwnl 欄目:ARM技術(shù)
UART0接收只能中斷一次??IRQEnable();
    PINSEL0 = (PINSEL0 & (~0x0F)) | 0x05;    // 設(shè)置I/O連接
    
    U0LCR = 0x80;                    
    Fdiv  = (Fpclk /16) / UART0_baud;        // 設(shè)置波特率
    U0DLM = Fdiv /256;
    U0DLL = Fdiv %256;

U0LCR = 0x03;
U0FCR=0x87;
U0IER=0x01;

//IRQEnable();--------》這里面是什么,怎么編譯不了

VICIntSelect=0x00;
VICVectCntl0=0x20 | 0x06;
    VICVectAddr0=(unsigned int)UART0_ISR;//設(shè)置中斷地址
    VICIntEnable=1<<0x06;//使能中斷    

2樓: >>參與討論
zsdfwnl
UART0接收只能中斷一次
要是按復(fù)位可以接收一次

第二次就不行了
void UART0_ISR(void)__irq
{
  unsigned CHAR i;

i=U0IIR;
SWITCH(i &0x0e)
{
    case 0x02:{    //發(fā)送數(shù)據(jù)
              }break;
    case 0x04:{//接收數(shù)據(jù)
                 i=0;
                 while((U0LSR&0x01) == 1)//還有數(shù)據(jù)繼續(xù)處理
                  {
                      UART0_buf[i]=U0RBR;
                      i++;
                   }
                 UART0_bb1=1;
              }break;
    case 0x06:{//接收線狀態(tài)
              }break;
    case 0x0c:{//字符超時(shí)
               // UOIER=U0IER &(~0x01);//禁止
              }break;
    default:break;
}
VICVectAddr0=0x00;
}

3樓: >>參與討論
zsdfwnl
IRQEnable();--------》這里面是什么,怎么編譯不了
IRQEnable();--------》這里面是什么,怎么編譯不了

沒(méi)找個(gè)這個(gè)
程序是按ZLG--》深入淺出ARM7里面的實(shí)力來(lái)寫的


4樓: >>參與討論
汽車電子
把超時(shí)和接收數(shù)據(jù)放在一起,再試
   case 0x0c:   //字符超時(shí),注,沒(méi)有break;
   case 0x04:   //接收數(shù)據(jù)
        //接收處理
        break;


5樓: >>參與討論
john1225cn
re
中斷里面沒(méi)有使能中斷。

6樓: >>參與討論
zsdfwnl
謝謝!!這是完整程序,在UV3下
unsigned CHAR const ttt[]={"123456789"};

void main(void)
{

PINSEL0=0x00;
PINSEL1=0x00;
PINSEL2=0x00;

IODIR0 = Bz;  
IODIR1 = led_1 | led_2;
led_1_1;
Bz_0;
UART0_init(19200);

UART0_sendBuf(ttt);
led_1_0;
Bz_1;
while(1)
{
    if(UART0_bb1)
       {
          led_2_0;
          UART0_bb1=0;
          UART0_sendBuf(UART0_buf);
          delay(500);
          led_2_1;

       }
}

}


unsigned CHAR UART0_bb1;
unsigned CHAR UART0_buf[20];
//=========================== __ram=====================================================
void UART0_ISR(void)__irq
{
  unsigned CHAR i;

i=U0IIR;
SWITCH(i &0x0e)
{
    case 0x02:{    //發(fā)送數(shù)據(jù)
              }break;
    case 0x04:{//接收數(shù)據(jù)
                 i=0;
                 while((U0LSR&0x01) == 1)//還有數(shù)據(jù)繼續(xù)處理
                  {
                      UART0_buf[i]=U0RBR;
                      i++;
                   }
                 UART0_bb1=1;
              }break;
    case 0x06:{//接收線狀態(tài)
              }break;
    case 0x0c:{//字符超時(shí)
               // UOIER=U0IER &(~0x01);//禁止
              }break;
    default:break;
}
VICVectAddr0=0x00;
}

//=================================================================================
void UART0_init(unsigned int UART0_baud)
{  
    
    unsigned int Fdiv;
    
    PINSEL0 = (PINSEL0 & (~0x0F)) | 0x05;    // 設(shè)置I/O連接到UART0
    
    U0LCR = 0x80;                            // DLAB=1,允許設(shè)置波特率
    Fdiv  = (Fpclk /16) / UART0_baud;        // 設(shè)置波特率
    U0DLM = Fdiv /256;
    U0DLL = Fdiv %256;
    
    U0LCR = 0x03;//禁止訪問(wèn)除數(shù)鎖存器   8
                 //1 :0 字長(zhǎng)設(shè)置 5 6 7 8
                 //2    停止位選擇 0--1個(gè)  1--2個(gè)
                 //3    奇偶使能   0--禁止 1--使能
                 //5:4  奇偶選擇   奇 偶   1  0
                 //6    間隔控制   0--禁止間隔發(fā)送 1--使能
                 //7    除數(shù)使能   0--禁止 1--使能

    U0FCR=0x87;//
                 //0    1可以訪問(wèn)高7位
                 //1    1 清零RxFIFO并復(fù)位指針
                 //2    1 清零TxFIFO并復(fù)位指針
                 //5:3  nc
                 //7:6  R觸發(fā)選擇 1 4 8 14  觸發(fā)前FIFO必須寫入多個(gè)字符

    U0IER=0x01;//        訪問(wèn)條件DLAB=0
                 //0    RBP--RDA中斷控制  0--禁止  1---使能
                 //1    THRE--  中斷控制  0--禁止  1---使能
                 //2    Rx      中斷控制  0--禁止  1---使能
                 //7:3  Nc
        // IRQEnable();
    VICIntSelect=0x00;
    VICVectCntl0=0x20 | 0x06;
    VICVectAddr0=(unsigned int)UART0_ISR;//設(shè)置中斷地址
    VICIntEnable=1<<0x06;//使能中斷    

}
//================================================================================
void UART0_sendBuf(unsigned CHAR *str)
{
// while(*str != '\0')   // 遇到結(jié)束符,退出
for(;*str != '\0';str++)
    {                            
        U0THR=*str;     // 發(fā)送數(shù)據(jù)
        while ((U0LSR & 0x40) == 0);// 等待數(shù)據(jù)發(fā)送完畢
        
    }

}

void delay(unsigned int tmp_t)
{           
unsigned CHAR tmp_j;
while( tmp_t--)
{
     for(tmp_j=100; tmp_j;tmp_j--);        
  }
}

7樓: >>參與討論
zsdfwnl
謝謝!汽車電子
現(xiàn)在按您的試過(guò),還是不行
也只只復(fù)位可以中斷一次,后來(lái)就沒(méi)反映了

8樓: >>參與討論
zsdfwnl
謝謝!john1225cn
中斷里面沒(méi)有使能中斷

應(yīng)該是怎么樣的呢?

IRQEnable();在ZLG的實(shí)例里找不到這個(gè)


9樓: >>參與討論
rili0508
路過(guò)
你把中斷子程序中的VICVectAddr0=0x00改成VICVectAddr=0x00試試看,

IRQEnable()在ZLG的target.h中被定義成了宏,它真真的實(shí)體在startup.s的


SwiFunction
        DCD     IRQDisable       ;0
        DCD     IRQEnable        ;1
        DCD        FIQDisable         ;2
        DCD        FIQEnable         ;3

IRQDisable
        ;關(guān)IRQ中斷
        MRS     R0, SPSR
        ORR     R0, R0, #NoInt
        MSR     SPSR_c, R0
        MOVS    PC, LR

IRQEnable
        ;開IRQ中斷
        MRS   R0, SPSR
        BIC   R0, R0, #NoInt
        MSR   SPSR_c, R0
        MOVS    PC, LR
        
FIQDisable
        ;關(guān)FIQ中斷
        MRS     R0, SPSR
        ORR     R0, R0, #NoFIQ
        MSR     SPSR_c, R0
        MOVS    PC, LR

FIQEnable
        ;開FIQ中斷
        MRS   R0, SPSR
        BIC   R0, R0, #NoFIQ
        MSR   SPSR_c, R0
        MOVS    PC, LR

10樓: >>參與討論
汽車電子
下載這個(gè)
 http://www.shawyoo.com下載中心有基于中斷和FIFO的串口程序

      Keil for ARM中開關(guān)中斷函數(shù)

/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
    函數(shù)名稱:DisableInterrupt
   功能描述:禁止中斷
   入口參數(shù):無(wú)
   出口參數(shù):無(wú)
   全局變量:
   創(chuàng)建時(shí)間:
   修改時(shí)間:
    注:關(guān)中斷要在中斷模式里執(zhí)行,SPSR要在arm模式才能識(shí)別
*/     
// $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 以上原形聲明的函數(shù)供本函數(shù)調(diào)用
void        DisableInterrupt(void)      __arm __swi(9)
{       
    //uint32        t;
       __asm
   {                       
      MRS     R0, SPSR
      ORR     R0, R0, #0xc0
      MSR     SPSR_c, R0           
   }
}




/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
    函數(shù)名稱:EnableInterrupt
   功能描述:使能中斷
   入口參數(shù):無(wú)
   出口參數(shù):無(wú)
   全局變量:
   創(chuàng)建時(shí)間:
   修改時(shí)間:
    注:關(guān)中斷要在中斷模式里執(zhí)行,SPSR要在arm模式才能識(shí)別
*/     
// $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 以上原形聲明的函數(shù)供本函數(shù)調(diào)用
void        EnableInterrupt(void)  __arm __swi(8)
{
    __asm
   {                       
      MRS     R0, SPSR
      BIC     R0, R0, #0xc0
      MSR     SPSR_c, R0           
   }          
}


* - 本貼最后修改時(shí)間:2006-3-24 11:54:57 修改者:汽車電子

11樓: >>參與討論
zsdfwnl
謝謝 rili0508
按你的現(xiàn)在編譯測(cè)試通過(guò)了
可以多次中斷

還請(qǐng)問(wèn)下IRQEnable(); 還是編譯不了,我有加startup.s的
是不是還要再定義一次還是怎么的

12樓: >>參與討論
zsdfwnl
謝謝 汽車電子
正在看

13樓: >>參與討論
zsdfwnl
3Q  IRQEnable();通過(guò)編譯,還有個(gè)警告是什么
__swi(0x00); void SwiHandle1(int Handle);
改成
void SwiHandle1(int Handle)__swi(0x00);

就可以編譯通過(guò)

已經(jīng)通過(guò)IRQEnable();

********************************************************************************************************/
    #endif

    #ifdef __cplusplus
    }
    #endif

#endif

#ifndef __TARGET_H
#define __TARGET_H

    #ifdef __cplusplus
    extern "C" {
    #endif


    #ifndef IN_TARGET

extern void Reset(void);
extern void TargetInit(void);

// Add IntDisable() and IntEnable() Functions
// changed by Chenxibing
// 2004-12-09
void SwiHandle1(int Handle)__swi(0x00);--------------->這里

#define IRQDisable() SwiHandle1(0)
#define IRQEnable() SwiHandle1(1)
#define FIQDisable() SwiHandle1(2)
#define FIQEnable() SwiHandle1(3)
//---end

//**********************************************************
assembling Startup.s...
linking...
*** WARNING L23: UNRESOLVED EXTERNAL SYMBOLS
Program Size: data=1189 const=34 code=924
creating hex file from "060323"...
"060323" - 0 Error(s), 1 Warning(s).

14樓: >>參與討論
rili0508
發(fā)現(xiàn)你原來(lái)的小問(wèn)題
__swi(0x00); void SwiHandle1(int Handle);
原來(lái)這句你的__swi(0x00)后面多了個(gè)分號(hào),當(dāng)然編譯不過(guò)去

要仔細(xì)哦

15樓: >>參與討論
zsdfwnl
回 rili0508
對(duì)不起!那是筆誤!
寫在前面在UV32下編譯不了
在后面就可以

現(xiàn)在加上那些.h就只有一個(gè)警告了
但是下載后居然程序是一點(diǎn)也執(zhí)行不了

16樓: >>參與討論
hotpower
這些老師真不錯(cuò)~~~
 
17樓: >>參與討論
zsdfwnl
回hotpower
你們都是我好老師啊

你那個(gè)頭文件做了嗎

很討厭人家那一堆的.c .s .h,要你一塊菜地就好了

18樓: >>參與討論
hotpower
頭文件基本全了
正在補(bǔ)充所有的硬件模塊的定義.

因?yàn)槊總(gè)模塊必須要調(diào)試才算通過(guò),主要是想實(shí)現(xiàn)"尿童也能玩ARM"

19樓: >>參與討論
feifan570
VICVectAddr0=0x00;有問(wèn)題
應(yīng)該是 VICVectAddr=0x00;


20樓: >>參與討論
zsdfwnl
.
VICVectAddr=0x00;
已經(jīng)OK
現(xiàn)在是調(diào)用IRQEnable(); 程序完全不能動(dòng)
屏蔽還可以  

還有
void SwiHandle1(int Handle)__swi(0x00);--------------->這里

#define IRQDisable() SwiHandle1(0)
#define IRQEnable() SwiHandle1(1)
#define FIQDisable() SwiHandle1(2)
#define FIQEnable() SwiHandle1(3)
//---end

//**********************************************************
assembling Startup.s...
linking...
*** WARNING L23: UNRESOLVED EXTERNAL SYMBOLS
Program Size: data=1189 const=34 code=924
creating hex file from "060323"...
"060323" - 0 Error(s), 1 Warning(s).

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
請(qǐng)教各位大俠及周工調(diào)節(jié)主頻的問(wèn)題
請(qǐng)問(wèn)UC/OS系統(tǒng)移植問(wèn)題!
單槍匹馬闖真難啊,幫助我一吧!
請(qǐng)問(wèn)UC/OS系統(tǒng)移植問(wèn)題!
請(qǐng)教:SPACE和DCD指令的困惑
免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)