ARM中断方式串口编程

发布者:rocky96最新更新时间:2016-06-21 来源: eefocus关键字:ARM  中断方式  串口编程 手机看文章 扫描二维码
随时随地手机看文章
串口编程(UART0)之中断方式

---------------------------------------------------------

from            :blog.csdn.net/tigerjb

Email               :jibo.tiger@gmail.com

 

---------------------------------------------------------

三.        中断方式的串口编程

1.用中断方式编写串口程序由那几部分组成

置顶
        ARM中断方式串口编程

 

2.硬件上的支持

1>UART0 发送FIFO缓冲区

A.        UART0含有1个16字节的发送FIFO缓冲区

B.        U0THR是UART0发送FIFO的最高字节

C.        UART的发送FIFO是一直使能的

 

置顶
        ARM中断方式串口编程

2>UART0接收FIFO缓冲区

A.    UART0含有一个16字节的接收FIFO缓冲区。

B.    软件设置接收FIFO缓冲区的触发字节。

置顶
        ARM中断方式串口编程

 

3>  中断接口:UART0的中断接口包含中断使能寄存器(U0IER)和中断标识寄存器(U0IIR)。

l  U0IIR:提供状态码用于指示一个挂起中断的中断源和优先级。

l  U0IER可以控制UART0的4个中断源。

4>  UART0有4个中断源:

A.    RLS(接收线状态)中断:

(1) 优先级最高

(2) 它在以下条件发生时产生错误

l  帧错误(FE)

l  溢出错误(OE)

l  奇偶错误(PE)

l  间隔中断(BI)

注:

Ø  可以通过查看U0LSR[4:1]中的值看到产生该中断的错误条件

Ø  读取U0LSR寄存器时清除该中断。

B.    RDA(接收数据可用)中断:

(1)与CTI中断并列第二优先级。

(2)在以下情况触发中断:

l  当接收的有效数据到达接收FIFO设置寄存器(U0FCR)中设置的触发点时,RDA被激活。当接收FIFO中的有效数据少于触发点时,RDA复位。

l  中断过程:

1>  移位寄存器(U0RSR)从RxD引脚接收串行数据后,送入接收FIFO中

2>  当接收FIFO中的有效数据数量达到预定的触发点时,置位RDA中断。

3>  从U0RBR寄存器中读取FIFO中最早到达的数据,当FIFO中的有效数据小于触发点时,清零RDA中断。

C.    CTI(字符超时指示)中断

(1) 优先级为2.

(2) 在以下情况发生中断:

l  当接收FIFO中的有效数据少于预定的触发点数量时,如果在一定时间内仍没有接收到新的数据,那将触发该中断。

(3) 上面的时间指的是:3.5~4.5个字节所需要的时间。

(4)  对接收FIFO的任何操作都会清零该中断标志。

(5) 中断过程:

l  移位寄存器(U0RSR)从RxD0引脚接收串行数据后,送入接收FIFO中。

l  当接收FIFO中的有效数据少于触发个数,但如果长时间没有数据到达,则触发CTI中断。

l  从U0RBR中读取接收FIFO中的数据,或者有新的数据送入接收FIFO,都将清零CTI中断。

注:

Ø  3.5~4.5个字节的时间:指在串口当前的波特率下,发送3.5~4.5个字节所需要的时间。

Ø  当接收FIFO中存放多个数据,从U0RBR读取数据,但是没有读完所有数据,那么在经过3.5~4.5个字节的时间后触发CTI中断。

D.   THRE(发送)中断

(1) 优先级为第三级优先级。

(2) 当FIFO为空并且在以下情况触发中断:

l  系统启动时,虽然发送FIFO为空,但不会产生THRE中断。

l  在上一次发生THRE中断后,向发送FIFO中写入1个字节数据,将在一个字节加上一个停止位后发生THRE中断

(because:如果发送移位寄存器为空,那么写入发送FIFO的数据将直接进入发送移位寄存器。此时发送FIFO仍然为空,如果立即产生THRE中断,就会影响紧接着写入发送FIFO的数据。

所以在发送完该一个字节以及一个停止位后,才产生THRE中断。

l  如果在发送FIFO中有过两个字节以上的数据,但是现在发送FIFO为空时,将立即触发THRE中断。

l  当THRE中断为当前有效的最高优先级中断时,往U0THR写数或者对U0IIR的读操作,将使THRE中断复位

 我们来看看这些中断源与存储器之间的关系:

 

置顶
        ARM中断方式串口编程

注:

Ø  由上图可知:UART0有4个中断源:分别是RLS(线状态)中断,RDA(接收数据)中断,CTI(字符超时)中断,THRE(发送数据)中断。

Ø  4个中断源的优先级如下图所示:

置顶
        ARM中断方式串口编程

3.串口中断接收初始化

 

 

1>串口中断接收初始化流程

l  设置I/O引脚连接到UART0

l  置位除数锁存位,配置UART0帧数据格式

l  根据波特率计算分频值

l  设置波特率

l  清除除数锁存位,并设置工作模式

l  使能FIFO,并设置触发点

l  允许RBR中断

 

注:我们可以发现与轮训方式相比,中断方式只是增加了使能FIFO,并设置中断触发点和允许RBR中断两步。

 

 

2>中断串口初始化需要配置的寄存器

     (与轮循方式配置方法相同的寄存器在此处不在涉及)

l  U0FCR(FIFO控制寄存器):U0FCR控制UART0 Rx和Tx FIFO的操作。

l  U0IER(中断使能寄存器):U0IER用于使能4个UART0中断源。

3>具体寄存器的配置

(1) U0FCR

A作用:控制UART0 Rx和Tx的操作。

B长度:8位寄存器。

C:每一位的含义:

l  第0位:表示FIFO使能

置1:表示使能对UART0 Rx和Tx 的FIFO以及U0FCR[7:1]的访问。

置0:表示不能使用Rx和Tx的FIFO以及步能对U0FCR[7:1]的访问。

注:该位的任何变化都将使UART0 FIFO清空。

l  第1位:表示Rx FIFO的复位。

置1:会清零UART0 RxFIFO中的所有字节并复位指针逻辑。该位自动清零。

l  第2位:表示Tx FIFO的复位。

置1:会清零UART0 TxFIFO中的所有字节并复位指针逻辑。改位自动清零。

l  第[5:3]位:保留位,用户不能对其进行操作。从保留位读出的值未被定义。

l  第[7:6]位:表示Rx 触发选择

00:触发点为0(默认为1字节)

01:触发点为1(默认为4字节)

10:触发点为2(默认为8字节)

11: 触发点为3(默认为14字节)

注:这两个位决定在激活中断之前,接收UART0 FIFO必须写入个字符。

(2) U0IER(中断使能寄存器)

A 作用:U0IER用于使能4个UART0中断源

B 长度:8位寄存器

C每一位的含义:

l  第0位:表示RBR中断使能

置1:使能RDA中断

置0:禁止RDA中断

注:U0IEER 第零位使能UART0接收数据可用中断。它还控制(CTI)字符接收超时中断。

l  第1位:表示THRE中断使能

置1:使能THRE中断

置0:禁止THRE中断

l  第2位:表示Rx线状态中断使能

置1:使能Rx线状态中断

置0:禁止RX线状态中断

注:U0IER第二位使能UART0 Rx线状态中断。该中断的状态可从U0LSR[4:1]读出

l  第[7:3]位:是保留位

注:用户不能向其写入1.

4>串口初始化程序:

*

* 作者:          tiger-john

* 时间:          2011年1月18日

* 名称:                    UART0_Init

* 功能:                    UART0初始化 通讯波特率115200,8位数据位,      1位停止位,无奇偶校验

*                               接收FIFO触发点为8字节,使能RDR(接收数据)中断

* 入口参数:            bps           串口波特率

* 出口参数:            无

/

void      UART0_Init(uint32 bps)

{

 

    uint16  Fdiv;

    PINSEL0 = (PINSEL0 & ~(0xf) | 0x05) ;  //设置UART0的引脚

    U0LCR = 0x83;                  //置为除数锁存位,进行配置

    Fdiv = (Fpclk>>4)/bps;

    U0DLM = Fdiv>>8;

    U0DLL = Fdiv%256;

    U0LCR = 0x03;            //清除除数锁存位,并设置工作模式

    U0FCR = 0x81;           // 使能FIFO,并设置触发点为8字节

    U0IER = 0x01;           // 允许RBR中断,即接收中断

  

}

5.    中断初始化

先来看一下UART0和VIC之间的关系:

 

 

1>中断初始化流程:

l  选择中断为向量中断或快速中断

l  分配中断通道

l  设置UART0向量地址

l  使能UART0中断

2>关于ARM中断编程方法和寄存器的使用在此不做涉及(如果想知道的话,可以看这篇文章http://blog.csdn.net/tigerjb/archive/2010/11/30/6045409.aspx

3>中断初始化程序:

/

* 作者:          tiger-john

* 时间:          2011年1月18日

* 名称:                Interrupt_Init

* 功能:                初始化串口中断,给串口中断选择为向量中断,     分配向量通道号1给串口                        

* 入口参数:           无

* 出口参数:            无

/

void Interrupt_Init (void)

{

   VICIntSelect = 0x00000000;      // 设置所有通道为IRQ中断    

   VICVectCntl1 = (0x20 | 6);   // UART0中断通道分配到IRQ slot 1

   VICVectAddr1 = (uint32)UART0_Exception; // 设置UART0向量地址         

   VICIntEnable = 1 << 6;                      //使能串口中断

   

           

}

6.    用中断编写接收函数

 

1>  中断服务函数流程

l  清除串口中断标识寄存器(U0IIR)

l  清除中断标志

l  读取接收FIFO中的数据

2>  中断函数服务函数中需要配置的寄存器

(1) U0IIR中断标识寄存器。

l  第0位:表示中断挂起

置1:表示没有挂起的中断

置0:表示至少有一个中断挂起

l  第[3:1]位:中断标识,这三位表示了对应UART0 Rx FIFO的中断。

001:表示发送中断(THRE)

010:  表示接收数据可用中断(RDA)

011:  表示接收线状态中断(RLS)

110:  表示字符超时中断(CTI)

l  第[7:4]:是保留位

注:

1.    U0IIR提供的状态码可用于指示一个挂起中断的中断源和优先级。

2.    在访问U0IIR过程中,中断被冻结

3.    如果在访问U0IIR时,产生了中断,该中断被记录。在下次访问U0IIR时可以读出,避免中断的丢失。

3>  中断服务函数程序:

/  * * 名    称:IRQ_UART0()

* 功    能:串口UART0中断接收8个字节的数据

* 入口参数:无

* 出口参数:无

/

uint8  rcv_buf[8];          // UART0数据接收缓冲区

 

void   __irq IRQ_UART0(void)

{   uint8  i;

    uint32 data;

    data = U0IIR;                 //清除中断表示寄存器标志

    VICVectAddr = 0;             //清除中断

    for(i=0; i<8; i++)

    {

        rcv_buf[i] = U0RBR;      // 读取FIFO的数据

    }

}  

 

 

7.    看一个总程序:

 

 

 

view plaincopy to clipboardprint?
  1. /Copyright (c)
  2.                                        西安邮电学院
  3.                                       graduate school
  4.                                        XNMS实验室
  5.                                       Author:冀博
  6.                                       Time:2011年1月20日
  7.                                  http://blog.csdn.net/tigerjb
  8.  
  9. --------------File Info-------------------------------------------------------------------------------
  10.  File name:           UART0_while
  11.  Last modified Date:  2011-01-20
  12.  Last Version:        1.0
  13.  Descriptions:        通过上位机给串口发送8字节数据,ARM2200接收到串口数据后,把数据又发送回上位机
  14. ------------------------------------------------------------------------------------------------------*/  
  15.   
  16. /
  17.  Modified by:         TIGER0-JOHN
  18.  Modified date:       2011-1-21
  19.  Version:             2.0  
  20.  Descriptions:        测试成功
  21.                         在用中断的时候在Startup.S文件中的InitStack子程序中,修改设置
  22.                         系统模式堆栈处的代码为"MSR CPSR_c,#0x5f"
  23.                         测试成功 ,在上面上发送16进制数时,每个之间用空格隔开
  24.                         不加前缀
  25. /  
  26.  
  27.  
  28. #include "config.h"  
  29. uint8 recver_buffer[8];      
  30. uint8 rcv_new;       
  31. /
  32. * 名称:       UART0_Init()
  33. * 功能:       UART0初始化(通讯波特率115200,8位数据位,
  34.                 1位停止位,无奇偶校验)
  35. * 入口参数: bps     串口波特率
  36. * 出口参数: 无
  37. /  
  38. void  UART0_Init(uint32 bps)  
  39. {    
  40.     uint16 Fdiv;  
  41.     PINSEL0 = 0x00000005;               //设置串口引脚  
  42.     U0LCR = 0x83;                       //置为除数锁存位,进行配置  
  43.     Fdiv = (Fpclk >> 4) / bps;          // 设置波特率  
  44.     U0DLM = Fdiv >> 8;                            
  45.     U0DLL = Fdiv & 0xff;                          
  46.     U0LCR = 0x03;                      //清除除数锁存位,并设置工作模式模式  
  47.     U0FCR = 0x81;                     // 使能FIFO,并设置触发点为8字节  
  48.     U0IER = 0x01;                     // 允许RBR中断,即接收中断  
  49.   
  50. }  
  51. /*  
  52. * 名    称:    IRQ_UART0
  53. * 功    能:   串口UART0中断接收8个字节的数据
  54. * 入口参数: 无
  55. * 出口参数: 无
  56. /   
  57. void   __irq IRQ_UART0(void)  
  58. {   uint8  i;  
  59.     if( 0x04 == (U0IIR&0x0F) )   
  60.     {  
  61.      rcv_new = 1;   // 设置接收到新的数据标志,并清除中断标志位  
  62.      for(i=0; i<8; i++)  
  63.         {  
  64.             recver_buffer[i] = U0RBR;       // 读取FIFO的数据  
  65.         }  
  66.           VICVectAddr = 0;  
  67.      }                            //清除中断  
  68. }    
  69. /
  70. * 名称:          Interrupt_Init
  71. * 功能:          初始化串口中断,给串口中断选择为向量中断,
  72. *                 分配向量通道号1给串口                        
  73. * 入口参数:      无
  74. * 出口参数:      无
  75. /  
  76. void Interrupt_Init (void)  
  77. {  
  78.     VICIntSelect = 0x00000000;              // 设置所有通道为IRQ中断  
  79.     VICVectCntl0 = 0x26;                    // UART0中断通道分配到IRQ slot 0,即优先级最高  
  80.     VICVectAddr0 = (int)IRQ_UART0;          // 设置UART0向量地址  
  81.     VICIntEnable = 0x00000040;              // 使能UART0中断  
  82.                  
  83. }  
  84. /
  85. * 名    称:            UART0_SendByte
  86. * 功    能:            向串口发送字节数据,并等待发送完毕。
  87. * 入口参数:            data              要发送的数据
  88. * 出口参数:            无
  89. /  
  90. void   UART0_SendByte(uint8 data)  
  91. {  
  92.         U0THR = data;                   
  93.         while(0 == (U0LSR & 0x40));  
  94. }  
  95. /
  96. * 名称:       UART0_SendBuf()
  97. * 功能:       通过串口发送一帧数据
  98. * 入口参数: *buffer  存放一帧数据
  99. * 出口参数: 无
  100. /  
  101. void UART0_SendBuf(uint8 *buffer)  
  102. {  
  103.     uint8 *pbuffer;  
  104.     uint8 i;  
  105.     for(pbuffer = buffer,i = 0;i < 8; i++)  
  106.     UART0_SendByte(*(pbuffer++));  
  107. }  
  108.   
  109. /
  110. * 名称:       main()函数
  111. * 功能:       上位机接收的数据开头两个字符为0x10,0x11,
  112. *               则原样输出,否次输出0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27
  113. * 入口参数: *buffer  存放一帧数据
  114. * 出口参数: 无
  115. /  
  116.   
  117. int main (void)  
  118. {   
  119.                                       
  120.     uint8 send_buffer[8] ={0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27};  //定义发送帧缓冲区  
  121.     UART0_Init(115200);  
  122.     Interrupt_Init();  
  123.     while(1)  
  124.         {  
  125.             if(1 == rcv_new)                    // 是否已经接收到8 Bytes的数据  
  126.                 {    
  127.                     rcv_new = 0;                    // 清除标志  
  128.                     if(0x10 ==recver_buffer[0] && 0x11 == recver_buffer[1])  
  129.                         {  
  130.                             UART0_SendBuf(send_buffer);  
  131.                         }  
  132.                     else  
  133.                         {  
  134.                             UART0_SendBuf(recver_buffer);  
  135.                         }  
  136.                 }   
  137.         }          
  138.      return 0;  
  139. }  
  140. /*
  141.                             End Of File
  142. /  

 

 

 

四.用中断编写发送函数

1.中断初始化

同上和用中断接收函数时的中断初始化是一样的

2.串口初始化

 1>串口初始化流程:

l  设置I/O引脚连接到UART0

l   置位除数锁存位,配置UART0帧格式

l  根据波特率计算分频值

l  设置波特率

l  清除除数锁存位,并设置工作模式

l  使能FIFO,并使TxFIFO复位

l  使能THRE中断

  2>串口初始化函数:

    /

* 名称:                    UART0_Init

* 功能:                    UART0初始化 通讯波特率115200,8位数据位,1位停止位,无奇偶校验

*                                  使能TxFIFO,和THRE中断

* 入口参数:            bps        串口波特率

* 出口参数:            无

/

void      UART0_Init(uint32 bps)

{

 

    uint16  Fdiv;

    PINSEL0 = (PINSEL0 & ~(0xf) | 0x05) ;  //设置UART0的引脚

    U0LCR = 0x83;         //置位除数锁存位,配置UART0帧格式

    Fdiv = (Fpclk>>4)/bps;  //根据波特率计算分频值

    U0DLM = Fdiv>>8;     //设置波特率

    U0DLL = Fdiv%256;

    U0LCR = 0x03;        // 清除除数锁存位,并设置工作模式

    U0FCR = 0x05;       // 使能TxFIFO,并使TxFIFO复位

    U0IER = 0x02;       // 使能THRE中断

  

}

3中断服务函数:

  1>中断服务函数流程:

l  清除串口中断标识寄存器

l  清除中断控制标识寄存器

  2>中断发送服务函数程序:

/

* 名    称:            UART0_Exception

* 功    能:            串口发送中断

* 入口参数:            无

* 出口参数:            data              发送的数据

/

void   __irq IRQ_UART0(void)

{  

  

uint32 data;

data = U0IIR;                                                 //清除中断表示寄存器标志

VICVectAddr = 0;                                              //清除中断

4.   用串口中断发送函数的总程序:

 

 

view plaincopy to clipboardprint?
  1. /Copyright (c)
  2.                                        西安邮电学院
  3.                                       graduate school
  4.                                        XNMS实验室
  5.                                       Author:冀博
  6.                                       Time:2011年1月20日
  7.                                  http://blog.csdn.net/tigerjb
  8.  
  9. --------------File Info-------------------------------------------------------------------------------
  10.  File name:           UART0_while
  11.  Last modified Date:  2011-01-20
  12.  Last Version:        1.0
  13.  Descriptions:        通过上位机给串口发送8字节数据,ARM2200接收到串口数据后,用中断方式把数据又发送回上位机
  14. ------------------------------------------------------------------------------------------------------*/  
  15.   
  16. /
  17.  Modified by:         TIGER0-JOHN
  18.  Modified date:       2011-1-21
  19.  Version:             2.0  
  20.  Descriptions:        测试成功
  21.                         在用中断的时候在Startup.S文件中的InitStack子程序中,修改设置
  22.                         系统模式堆栈处的代码为"MSR CPSR_c,#0x5f"
  23.                         测试成功 ,在上面上发送16进制数时,每个之间用空格隔开
  24.                         不加前缀
  25. /  
  26.  
  27.  
  28. #include "config.h"  
  29. uint8 recver_buffer[8];      
  30. uint8 rcv_new;       
  31. /
  32. * 名称:           UART0_Init
  33. * 功能:           UART0初始化 通讯波特率115200,8位数据位,1位停止位,无奇偶校验
  34. *                   使能TxFIFO,和THRE中断
  35. * 入口参数:     bps     串口波特率
  36. * 出口参数:     无
  37. /  
  38. void    UART0_Init(uint32 bps)  
  39. {  
  40.    
  41.     uint16  Fdiv;  
  42.     PINSEL0 = (PINSEL0 & ~(0xf) | 0x05) ;        //设置UART0的引脚  
  43.     U0LCR = 0x83;                                //置位除数锁存位,配置UART0帧格式  
  44.     Fdiv = (Fpclk>>4)/bps;                       //根据波特率计算分频值  
  45.     U0DLM = Fdiv>>8;                            //设置波特率  
  46.     U0DLL = Fdiv%256;  
  47.     U0LCR = 0x03;                               //  清除除数锁存位,并设置工作模式  
  48.     U0FCR = 0x05;                               // 使能TxFIFO,并使TxFIFO复位  
  49.     U0IER = 0x02;                               // 使能THRE中断  
  50.      
  51. }  
  52. /
  53. * 名    称:       UART0_Exception
  54. * 功    能:       串口发送中断
  55. * 入口参数:     无
  56. * 出口参数:     data        发送的数据
  57. /  
  58. void   __irq IRQ_UART0(void)  
  59. {     
  60.      
  61.     uint32 data;  
  62.     data = U0IIR;                                   //清除中断表示寄存器标志  
  63.     VICVectAddr = 0;                                //清除中断  
  64.       
  65.     
  66. }    
  67. /
  68. * 名称:          Interrupt_Init
  69. * 功能:          初始化串口中断,给串口中断选择为向量中断,
  70. *                 分配向量通道号1给串口                        
  71. * 入口参数:      无
  72. * 出口参数:      无
  73. /  
  74. void Interrupt_Init (void)  
  75. {  
  76.     VICIntSelect = 0x00000000;              // 设置所有通道为IRQ中断  
  77.     VICVectCntl0 = 0x26;                    // UART0中断通道分配到IRQ slot 0,即优先级最高  
  78.     VICVectAddr0 = (int)IRQ_UART0;          // 设置UART0向量地址  
  79.     VICIntEnable = 0x00000040;              // 使能UART0中断  
  80.                  
  81. }  
  82. /
  83. * 名    称:            UART0_RcvByte
  84. * 功    能:            用查询方式接收一字节的数据
  85. * 入口参数:            无
  86. * 出口参数:            data              要接收的数据
  87. /  
  88. uint8   UART0_RcvByte(void)  
  89. {  
  90.     uint8 rcv_data ;  
  91.     while((U0LSR&0X01)==0);         //等待数据到达  
  92.     rcv_data = U0RBR;               //从U0RBR中读出接收到的数据  
  93.     return  rcv_data;               //返回接收到的数据  
  94.   
  95. }  
  96. /
  97. * 名称:       UART0_RecBuf()
  98. * 功能:       接收串口发送过来的帧数据,           
  99. * 入口参数: *buffer  存放一帧数据
  100. * 出口参数: 无
  101. /  
  102. void UART0_RecBuf (uint8 *buffer)  
  103. {  
  104.     uint8 *pbuffer;  
  105.     uint8  i;  
  106.     for(pbuffer = buffer, i = 0;i < 8; i++)  
  107.      {  
  108.         *(pbuffer++) = UART0_RcvByte();  
  109.      }  
  110. }  
  111. /
  112. * 名称:       main()函数
  113. * 功能:       上位机接收的数据开头两个字符为0x10,0x11,
  114. *               则原样输出,否次输出0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27
  115. * 入口参数: *buffer  存放一帧数据
  116. * 出口参数: 无
  117. /  
  118.   
  119. int main (void)  
  120. {   
  121.     uint8 i;                                  
  122.     uint8 send_buffer[8] ={0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27};  //定义发送帧缓冲区  
  123.     UART0_Init(115200);  
  124.     Interrupt_Init();  
  125.     while(1)  
  126.         {  
  127.             UART0_RecBuf(recver_buffer);                //接收8字节数据  
  128.             if(0x10 ==recver_buffer[0] && 0x11 == recver_buffer[1])  
  129.                 {   
  130.                     for(i = 0;i < 8 ;i++)  
  131.                     {  
  132.                         U0THR = send_buffer[i];         //用中断发送每次8字节  
  133.                     }     
  134.                 }  
  135.             else  
  136.                 {  
  137.                     for(i = 0;i < 8;i++)               //用中断发送每次8字节  
  138.                     {  
  139.                         U0THR = recver_buffer[i];  
  140.                     }  
  141.                 }   
  142.         }          
  143.      return 0;  
  144. }  
  145. /*
  146.                             End Of File
  147. /

 

关键字:ARM  中断方式  串口编程 引用地址:ARM中断方式串口编程

上一篇:s3c6410 uboot代码分析
下一篇:ARM指令集和常用寄存器

推荐阅读最新更新时间:2024-03-16 14:58

ARM9微控制器LPC3180的软硬件平台设计
摘要 介绍以Philips LPC3180微控制器为核心的嵌入式软硬件平台设计;对系统设计的硬件部分和软件部分进行详细的分析,并针对LPC3180芯片特性着重讨论了其软件系统构建以及系统启动流程。实验结果表明,LPC3180嵌入式系统平台结合片内硬件浮点运算单元,具有高性能的浮点运算处理能力,可满足复杂的嵌入式应用场合的要求。 关键词 LPC3180 ARM9 软硬件平台 嵌入式应用系统设计包括硬件平台和软件平台两部分。前者是以嵌入式微控制器/微处理器为核心的硬件系统;后者则是围绕嵌入式操作系统构建的软件系统。两者在设计上是密不可分的,并且需要在设计之间进行权衡优化,根据实际应用进行外扩和裁剪。 基于ARM92
[单片机]
基于ARM9的嵌入式3G无线视频监控系统设计
国内外市场上主要推出的是数字控制的模拟视频监控和数字视频监控两类产品。前者的技术发展已经非常成熟,产品性能稳定, 在实际工程中得到了广泛应用。 后者是新近崛起的以计算机技术及图像视频压缩技术为核心的新型视频监控系统, 该系统在解决模拟视频监控系统的部分弊端的基础上迅速崛起。在互联网的普遍推广和网络带宽逐渐提高的背景下,视频监控技术飞速发展, 出现了集多媒体技术、网络通信技术、嵌入式技术于一体的嵌入式网络视频监控系统。 目前国内嵌入式视频监控系统的研究有了很大的发展, 但是国内对嵌入式无线视频监控系统的研究还比较少。本文介绍了自主开发的基于ARM 的嵌入式无线视频采集系统设计方案。该方案采用S3C2410 嵌入式处理器和ARML
[单片机]
基于<font color='red'>ARM</font>9的嵌入式3G无线视频监控系统设计
采用ARM+Android的智能近视分析仪
新医改启动以来,加快推进了医疗卫生的信息化和智能化,智能医疗正成为整个医疗产业的热点,有助改善看病难题,提高医疗机构的工作效率,人们在社区或家里就可以享受到医疗服务。医疗终端设备的小型化,信息化,智能化,为智能医疗行业的发展提供了条件。智能医疗对于医疗设备制造商、芯片企业、应用开发等产业链的各个环节,是一座“金矿”、一项潜力极大的“朝阳产业”。 最新数据统计显示,我国近视人数不但高达4.5亿,且呈逐年上升的趋势。目前,青少年近视患病率已经高居世界第一位。其中青少年近视情况尤为令人担忧:全国7岁~12岁的小学生、13岁~15岁的初中生、16岁~18岁的高中生及19岁~22岁的大学生,他们的视力不良率分别为45.71%、74.36%、
[医疗电子]
从0开始学ARM-ARM指令,移位、数据处理、BL、机器码
0.指令分类 数据处理指令 数据处理指令可分为数据传送指令、算术逻辑运算指令和比较指令等。 数据传送指令用于在寄存器和存储器之间进行数据的双向传输。 算术逻辑运算指令完成常用的算术与逻辑的运算,该类指令不但将运算结果保存在目的寄存器中,同时更新CPSR中的相应条件标志位。 一、MOV指令 1、MOV 语法: MOV{条件}{S} 目的寄存器,源操作数 功能: MOV指令完成从另一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器。其中S选项决定指令的操作是否影响CPSR中条件标志位的值,当没有S时指令不更新CPSR中条件标志位的值。 指令示例: MOV r0, #0x1 ;将立即数0x1传送到
[单片机]
从0开始学<font color='red'>ARM</font>-<font color='red'>ARM</font>指令,移位、数据处理、BL、机器码
[JZ2440] 安装 arm-linux-gcc 交叉编译器
一、相关资料获取   我个人在学习 mini2440 开发板时是跟着韦东山老师的视频学习的,视频和资料可以访问百问网论坛获取。   百问网论坛链接: http://www.100ask.net/bbs/forum.php   下载好资料后在视频配套资料下有 百问网JZ2440v2主光盘.iso 文件,解压或者用虚拟光驱加载,在光盘 tools 目录下可以获取到 arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 交叉编译器。 二、安装交叉编译器   1. 建立工作目录,在 Ubuntu 家目录下建立 workspace 目录,再建立 s3c2440 目录,该目录下存放所有 mi
[单片机]
基于ARM微处理器的液晶触摸屏接口设计
0 引言 人机交互界面的种类较多,如键盘、数码管显示器、液晶显示器及带触摸的液晶屏等。决定人机交互接口方式的主要因素是成本和实际应用的需要。近十年来,液晶触摸屏以功耗低、重量轻、精度高和良好的人机界面等技术特点, 在电子设备特别是手持类电子产品中得到了普遍应用。带触摸的液晶屏,只要能测量出触摸点的坐标位置,即可根据屏上对应坐标点的显示内容或图符获知触摸者的意图, 通过微处理器处理声音、图像、文字及触摸输入控制等信息,使之成为能进行信息存取、输入和输出的集成系统。基于微控制器与液晶模块的硬件接口设计及软件编程在智能系统设计中有着重要的应用价值。ARM 微处理器,运算速度快、资源丰富、性价比高,是当前较为流行的嵌入式控制器。本文介
[单片机]
基于<font color='red'>ARM</font>微处理器的液晶触摸屏接口设计
ARM发布Mali-C71图像信号处理器,推动下一代汽车图像处理
2017年4月25日,中国北京——ARM今天正式发布Mali-C71图像信号处理器(ISP),应对汽车图像处理所面临的挑战,包括在极端条件下对图像进行快速的处理和分析,符合严苛的汽车安全标准的设计要求。Mali-C71也是ARM Mali Camera系列的第一款产品。下面就随单片技校吧一起来了解一下相关内容吧。 随着技术的演进,汽车已经成为一个充满活力的创新平台,不仅正在改变驾驶者的体验,也使得真正的自动驾驶离我们越来越近。先进驾驶辅助系统(ADAS)是这一技术演进的一个不可或缺的关键。一些最新的ADAS应用,例如更先进的后视镜、驾驶员疲劳检测以及行人保护系统,都对车内图像处理提出了更高的要求。这些技术要求更多数量的车内摄像头
[单片机]
聚焦AI,探析边缘智能新动向,研华AI on Arm合作伙伴会议开启报名!
研华Arm人工智能合作伙伴会议将于3月28日于上海古井假日酒店召开,此次会议将汇集芯片厂家和软件生态合作伙伴,共同探讨Arm平台的AI技术创新及服务升级,开拓边缘智能在多行业全方位的应用机会。 议程一览: 上午主会场:边缘运算未来趋势 迎接新兴产业应用新时代 下午分会场1:硬件设计构建AI可靠基础 下午分会场2:软件服务助力AI应用落地 演讲嘉宾: 本次活动邀请到来自高通,瑞芯微,Hailo,瞰瞰智能,微软,麒麟,海华为各位带来关于生态伙伴AI技术的新成果分享和落地应用经验。 活动亮点: 与业界专家面对面交流,了解Arm平台AI技术的新动态。 分享研华硬件可靠性设计经验,探索工控行业品质标兵。
[工业控制]
聚焦AI,探析边缘智能新动向,研华AI on <font color='red'>Arm</font>合作伙伴会议开启报名!
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved