嵌入式体系结构课程总结

                         

重庆理工大学

嵌入式体系结构课程总结

题目: LPC2131 ARM硬件结构及程序设计

 

       二级学院  计算机科学与工程         

       专    业  计算机科学与技术         

班    级        37-3               

       学生姓名  周艺静 学号 11103070334

       教    师   刘          政           

       时    间     2013. 11.10           

       成    绩                            


   

(1)  系统控制和启动过程

(2)  GPIO

(3)  向量中断及外部中断输入

(4)  定时器

(5)  SPI

(6)  I2C

(7)  UART

(8)  A/D

(9)  WDT

(10)PWM

一、启动过程和控制系统

1.系统启动:

   ARM微处理器在上电或复位后首先运行Boot Block中的一段代码,这段代码称为

“引导代码”,有芯片厂商固化在芯片中。

   此后,在正式运行用户Main函数之前,还需要运行一段启动代码,由用户添加。

启动代码包括向量表定义,对战初始化,系统变量初始化,中断系统初始化,I/O初始化,外围初始化,地址重映射等。

流程图:

         

(2.)系统控制:

一个ARM芯片中通常有很多功能部件,有一些部件是全局性的,它们状态的改变可能引起整个系统运行状态的改变,这些部件我们统一称之为系统控制模块。

         在这些系统控制模块中,有些部件需要外部引脚的配合,如晶体振荡器、外部复位输入。

模块包括:

晶体振荡器,复位,存储器映射控制,锁相环(PLL),VPB分频器,功率控制,唤醒定时器.

在系统控制模块中,有些部件需要在进行寄存器配置后才能正常工作,如存储器映射控制、锁相环等。

二、GPIO介绍

GPIO:

  LPC2131微控制器具有两个端口P0和P1,可以作为GPIO使用的引脚为46个。

ARM的GPIO具有如下特征:

1、 可以独立控制每个GPIO口的方向(输入/输出模式)

2、 可以独立设置没GOIO得输出状态(高/低电平)。

3、 所有GPI口在复位后默认为输入状态。

GPIO用于输出控制或者用于引脚电平状态的读取。

GPIO相关的寄存器包括:

引脚值寄存器IOxPIN:读取该寄存器可以了解GPIO引脚当前的电平状态。

                     Bak=IO0PIN

方向寄存器IOxDIR:控制引脚的输入输出方向。

                    IO0DIR=0x000000FF

输出位置寄存器IOxSET:控制引脚输出高电平。

                    IO0SET=0x00000FF

                    Bak=IO0SET

输出清零寄存器IOxCLR:控制引脚输出低电平。

                    IO0CLR=0x000000F

§  引脚设置为输出方式时,输出状态由IOxSET和IOxCLR中最后操作的寄存器决定;

§  大部分GPIO输出为推挽方式(个别引脚为开漏输出),正常拉出/灌入电流均为4mA(短时间极限值40mA);

§  复位后默认所有GPIO为输入模式。

三、向量中断及外部中断输入

ARM7TDMI内核具有两个中断输入,分别为IRQ中断和FIQ中断。向量中断控制器(VIC)负责管理芯片的中断源,最多可以管理32个中断输入请求。

程序状态寄存器CPSRVIC的关系

ARM内核通过CPSR来监视和控制内部的操作,CPSR中的“I”位和“F”位分别用来控制IRQ模式和FIQ模式的使能。

     当I = 1时,禁止IRQ中断

     当I = 0时,使能IRQ中断

中断分类

中断输入请求可以在VIC中被设置为以下三类:

§    FIQ中断:具有最高优先级;

§    向量IRQ中断:具有中等优先级;

§    非向量IRQ中断:具有最低优先级;

FIQ中断具有最高优先级。一旦发生FIQ中断,ARM处理器进入FIQ模式,PC

  指向FIQ异常入口0x1C,开始处理FIQ中断。

     VICIntSelect=1(1<<EINT0_num);

     EXTINT=0x01;

     VICIntEnable=(1<<EINT0_num);

  IRQ中断具有中等优先级。一旦发生向量IRQ中断,ARM处理器进入IRQ模式

  PC指向IRQ异常入口0x18,同时姓梁IRQ服务程序的地址从相应通道的向量

  地址寄存器中复制到VIC的向量地址寄存器,PC根据VICVectAddr内的地址进

  行跳转,执行相应的服务程序。·

        VICIntSelect=0x00;

        VICVectCnt10=0x20|Timer0_num;

        VICVectAddr0=(unsigned int)Time0_ISR;

        T0IR=0x01;

VICIntEnable=(1<<Timer0_num);

  IRQ中断具有最低优先级。一旦发生非向量IRQ中断,ARM处理器进入IRQ模

  同时中断服务程序的地址从默认向量地址寄存器VICDefVectAddr复制到向量地

  础器VICVectAddr中。

         VICIntSelect=0x00000000;

         VICDeVectAddr=(unsigned int)Eint0_ISR;

         EXTINT=0x01;

         VICIntEnable=(1<<EINT0_num);

寄存器描述-控制寄存器

控制寄存器功能描述

中断选择寄存器VICIntSelect:将中断请求非别分配为FIQ或IRQ。

中断使能寄存器VICIntEnable:用来使能已经分配的中断,

中断使能清零寄存器VICIntEnClear:禁止对应通道的中断源产生中断。

寄存器描述-参数设置寄存器

参数设置寄存器功能描述

向量地址寄存器VICVectAddr:存放IRQ中断服务程序的地址。

默认向量地址寄存器VICDefVectAddr:保存非向量IRQ中断服务程序的地址。

向量地址寄存器0~15 VICVectAddr0~15:保存16个向量IRQ通道的中断服务地址。

向量控制寄存器0~15 VICDefVectCnt10~15:确定每个向量IRQ的中断通道的优先级。

寄存器描述-状态寄存器

IRQ中断的设计实例:将定时器0中断分配为向量IRQ通道0,中断服务程序地址设置为Timer0_ISR。

代码:

VICIntSelect    = 0x00000000;

VICVectAddr0 = (int)Timer0_ISR;

VICVectCntl0  = (0x20 | 4);

VICIntEnable = (1 << 4);

LPC2000系列ARM具有4路外部中断,可以设置为2种类型:

 边沿触发:

Ø   上升沿触发

Ø   下降沿触发

 电平触发:

Ø   高电平触发

Ø   低电平触发

1.边沿触发中断.:下降沿触发类型中断的请求和清除时序。

2.电平触发中断.:低电平触发类型中断的请求和清除时序。

3.外部中断源:LPC2000系列微控制器几乎所有的外设部件都可以产生中断。其中外部中断含有4个独立的中断输入。

外部中断应用示例:

PINSEL1 = (PINSEL1&0xFFFFFFFC) | 0x01; //初始化EINT0为电平中断

EXTMODE = EXTMODE & 0x0E;//初始化EINT0为下降沿中断

PINSEL1 = (PINSEL1&0xFFFFFFFC) | 0x01;

EXTMODE = EXTMODE | 0x01;

EXTPOLAR = EXTPOLAR & 0x0E;//清除所有外部中断标志

EXTINT = 0x0F;

四、定时器

定时器:LPC21/22XX含有两个32位定时器:定时器0和定时器1.定时器对外设时钟进行技术,根据4个匹配寄存器的设定,可设置为匹配是产生中断或执行其他动作。还包括4个捕获输入,拥有在输入信号发生跳变时捕获定时器的当前值,并且可选择产生中断。

定时器主要功能:

1. 预分屏器

2. 匹配功能

3. 捕获功能

基本寄存器:

IR中断标志寄存器:用于捕获中断的标志位。

    T0IR=Oxff;

TCR定时器控制寄存器:用于控制定时器计数器的操作。

        T0TCR=0x01;

TC定时器计数器:为32位计数器,计数频率为PCLK经过预分频计数器后频率值。

PR预分频寄存器:用于设定预分频值,为32位寄存器。

PC预分频计数器:为32位计数器,计数频率为PCLK,当计数值等于预分频计数器的值时,TC计数器加1。

匹配功能寄存器:

MCR匹配控制寄存器:用于控制在匹配时是否产生中断或复位TC。

MR0匹配寄存器0:通过MCR寄存器可以设置匹配发生时的动作。

MR1匹配寄存器1:通过MCR寄存器可以设置匹配发生时的动作。

MR2匹配寄存器2:通过MCR寄存器可以设置匹配发生时的动作。

MR3匹配寄存器3:通过MCR寄存器可以设置匹配发生时的动作。

EMR外部匹配寄存器:EMR控制外部匹配管脚MATx.0~MATx.3。

捕获功能寄存器:

CCR捕获控制寄存器:CCR控制用于装载捕获寄存器的捕获输入边沿以及在发生捕获时是否产生中断。

CR0捕获寄存器0:当在CAP0.0(CAP1.0)上产生捕获事件时,CR0装载TC的值。

CR1捕获寄存器1:当在CAP0.0(CAP1.0)上产生捕获事件时,CR0装载TC的值。

CR2捕获寄存器2:当在CAP0.0(CAP1.0)上产生捕获事件时,CR0装载TC的值。

CR3捕获寄存器3:当在CAP0.0(CAP1.0)上产生捕获事件时,CR0装载TC的值。

中断标志寄存器-IR

控制寄存器-TCR

定时器控制寄存器TCR用于控制定时器计数器的操作。

定时器操作示例-定时器0初始化

Void Time0Init(void)

{

    T0TC  = 0;// 定时器设置为0

    T0PR  = 0;// 设置预分频值

    T0MCR = 0x03;// 设置匹配模式,复位并中断

    T0MR0 = Fpclk / 10;// 设置匹配值,0.1S

    T0TCR = 0x01;// 启动定时器0

}

五、SPI介绍

SPI接口特性如下:

1.具有两个完全独立的SPI控制器。

2.遵循同步串行接口规范

3.全双工数据通信

4.可配置为SPI主机或从机

5.最大数据位速率为外设时钟Fpclk的1/8

  引脚描述

SCK:行时钟。用于同步SPI接口间数据传输的时钟信号。该时钟信号总是由主机输出。

SSEL: 从机选择。SPI从机选择信号是一个低有效信号。

MISO: 主入从出。MISO信号是一个单向的信号,它将数据由从机传输到主机。

MOSI: 主出从入。MOSI信号是一个单向的信号,它将数据从主机传输到从机。

数据传输

时钟极性控制位 —— CPOL

该位决定了SPI总线空闲时,SCK时钟线的电平状态。

CPOL = 0,当SPI总线空闲时,SCK时钟线为低电平;

CPOL = 1,当SPI总线空闲时,SCK时钟线为高电平。

时钟相位控制位 ——CPHA

该位决定SPI总线上数据的采样位置 。

CPHA = 0:SPI总线在时钟线的第 1 个跳变沿处采样数据;

CPHA = 1:SPI总线在时钟线的第 2 个跳变沿处采样数据。

CPOL和CPHA位在SPI控制寄存器中进行设置。

SPI寄存器

SPCR:SPI控制寄存器。该寄存器控制SPI的操作模式

SPSR: SPI状态寄存器。该寄存器显示SPI的状态

SPDR: SPI数据寄存器。该双向寄存器为SPI提供发送和接收的数据。发送数据通过写该寄存器提供。SPI接收的数据可以从该寄存器读出。

SPCCR: SPI时钟计数寄存器。该寄存器控制主机SCK的频率

SPINT: SPI中断标志寄存器。该寄存器包含SPI接口的中断标志

SPI应用示例——作为主机

#define  MSTR (1 << 5)

#define  CPOL  (1 << 4)

#define  CPHA  (1 << 3)

#define  LSBF  (1 << 6)

#define SPI_MODE (MSTR | CPOL)

void MSpiIni(uint8 fdiv)

{

    if(fdiv < 8)

        fdiv = 8;

    S0PCCR = fdiv & 0xFE;

    S0PCR  = SPI_MODE;

}

六、I2C

I2C接口特性如下:

1.标准的I2C总线接口

2.可配置为主机、从机或主机/从机

3.可编程时钟可实现通用速率控制

4.主、从机之间双向数据传输

5.多主机总线

6.同时发送的主机之间进行仲裁、避免总线数据的冲突

7.高速模式下,数据传输的数独为0~400kbit/s

引脚描述:

SDA:串行数据I2C数据输入和输出,相关端口为开漏输出以符合I2C规范

SCL:串行时钟I2C时钟输入和输出,相关端口为开漏输出以符合I2C规范

数据传输

1.字节格式;

2.应答。

I2C寄存器

I2CONSET:I2C控制置位寄存器

I2STAT:I2C状态寄存器

I2DAT:I2C数据寄存器

I2ADR:I2C从地址寄存器

I2SCLH:SCL占空比寄存器高半字

I2SCLL:SCL占空比寄存器低半字

I2CONCLR:I2C控制清零寄存器

I2C接口中断

I2C和I2C1分别处于VIC的通道9和通道19,中断使能寄存器VICIntEnable用来控制VIC通道中的中断使能。

当VICIntEnable[9]=1时,通道9中断使能,即I2C0中断使能;

当VICIntEnable[19]=1时,通道19中断使能,即I2C1中断使能。

中断选择器VICIntEnable用来分配VIC通道的中断。当分配为IRQ时,还需要设置对应的通道控制寄存器和地址寄存器。

七、UART

UART的特性:

1.16字节接收FIFO和16字节发送FIFO。

2.寄存器位置符合16C550工业标准。

3.接收器FIFO触发点可为1、4、8和14字节

4.内置波特率发生器

5.UART1含有标准调制解调器接口信号

UART结构图

1.UART发送单元-UnTx

2.UART接收模块-UnRx

3.UART波特率发生器

4.Modem接口

5.中断接口

UART寄存器

1.UART接收器缓存寄存器UnRBR:是UARTn接收FIFO的出口。

        While((U0LSR&0x01==0);

        Data_buf=U0RBR;

2.UART发送器保持寄存器UnTHR:是UARTn发送FIFO的入口。

        U0THR=data;

        While((U0LSR&0x40)==0);

3.UART除数锁存寄存器:保存了用于产生波特率时钟的VPB时钟(PCLK)的分频值。

4.UART中断使能寄存器UnIER:可以使能4个UARTn中断源。

U0IER=0x01;

5.UART中断标识寄存器UnIIR:断标识寄存器,提供的状态代码用于指示一个怪气中断的中断源和优先级。

6.UART FIFO控制寄存器UnFCR:控制UARTn收发FIFO的操作。

    U0FCR=0x81;

7.UART控制寄存器UnLCR:决定发送和接收数据字符的格式。

    U0LCR=0x03;

8.UART1 Modem控制寄存器U1MCR:使能Modem的诙谐模式并控制Modem的输出信号。

9. UART状态寄存器UnLSR:为只读寄存器,提供UARTnTx和Rx模块的状态信息。

10.UART1 Modem状态寄存器U1MSR:是只读寄存器,提供Modem输入信号的状态信息。

11.UART高速缓存寄存器UnSCR:在操作UARTn时,UnSCR无效,用户可自由对该寄存器进行读写,不提供中断接口向主机指示UnSCR所阿生的读写操作。

UART初始化示例

#define UART_BPS 115200//定义通信波特率

Void UART0_Ini(void)

{

Uint16 Fdiv;

U0LCR=0x83;

Fdiv=(Fpclk/16)/UART_BPS;

U0DLM=Fdiv/256;

U0DLL=Fdiv%256;

U0LCR=0x03;

}

   UART查询方式发送数据

Void UATR0_SendByte(uint8 data)

{ U0THR=data;

         While((U0lsr&0x40)==0);}

UART接收数据

    Uint8 UART0_RcvByte(void)

{uint8 rcv_data;

         While((U0LSR&0x01)==0);

     Rcv_data=U0RBR;

     Return(rcv_data);}

UART中断

1、 接收中断

有两种情况触发UART接收中断:接收字节数达到接收FIFO的触发点(RDA)和接收超时(CTI)。

2、 发送中断

当发送FIFO有诶空变为空时,触发“发送中断(THRE)”。

3、 接收状态中断

接收数据时,如果出现溢出错误、就错误、真错误和间隔中断中的任意一个错误时,触发接收状态中断。

4、 Modem中断

当Modem输入引脚DCD/DSR或CTS发生状态变化时,触发Modem中断。

八、A/D

A/D转换器特性:

1.10位逐次逼近式模式转换器

2.4个或8个引脚复用为A/D输入脚

3.测量范围:0~3.3V

4.10位转换事件>=2.44us

5.一路活多路输入的Burst转换模式

6.转换触发信号可选择:输入引脚的跳变或定时器的匹配

7.具有掉电模式

A/D寄存器

A/D控制寄存器(ADCR):A/D转换开始前,必须写入ADCR寄存器来选择工作模式。

A/D数据寄存器(ADDR):该寄存器包含ADC的DONE标志位和10位的转换结果(当DONE位为1时,转换结果才是有效的)

AIN0初始化示例:

    PINSEL1=0x00400000;

    ADCR=(1<<0)|((Fpclk/10000-1)<<8)|(0<<16)|(0<<17)|(0<<21)|(0<<22)|(0<<24)|(0<<27);

读取A/D结果时,要首先等待转换结束,然后再读取结果。由于10位二进制数位于ADDR[15:6],因此,需要进行转换,

Uint32 ADC_Data;

While((ADDR&0x8000000)==0;

ADC_Data=ADDR;

ADC_Data=(ADC_Data>>6)&0x3ff;

    ADC中断

中断选择寄存器VICIntEnable用来分配VIC通道的中断,当某一位为1时,敌营的通道中断分配为FIQ;当某一位为0时,对应的通道中断分配为IRQ。VICIntSelect[18]用来控制通道18,即:

1.ICIntEnable[18] = 0时,通道18中断禁止,ADC中断分配为IRQ中断。

2.当VICIntEnable[18] = 1时,通道18中断使能,ADC中断分配为FIQ中断。

九、WDT

看门狗特性:

1.带内部预分频器的可编程32位定时器

2.如果没有周期性重装(喂狗)动作,则产生片内复位

3.看门狗软件使能后,必须由复位来禁止

4.错误/不完整的喂狗时序会导致复位/中断;

5.具有指示看门狗复位的标志和模式;

6.在WDTC寄存器中设置模式,并使能看门狗;

7.通过向WDFEED寄存器顺序写入0*55,启动看门狗;

8.在看门狗向下溢出之前应当再次喂狗以防止复位或中断

看门狗寄存器描述:

1.看门狗模式寄存器WDMOD:包含看门狗定时器的基本模式和状态

WDMOD=0x02;

2.看门狗定时器常数寄存器WDTC:决定看门狗超时值

WDTC=ox10000;

WDMOD=0x03;

3.看门狗喂狗寄存器WDFEED:通过它执行特定喂狗时序

WDFFED=0xAA

WDFFED=0x55;

4.看门狗定时器值寄存器WDTV:用于读取看门狗定时器的当前值

WDT基本操作方法:

1.设置看门狗定时器重装值—WDTC;

2.设置看门狗的工作模式—中断、中断且复位;

3.周期性喂狗,调用函数—WDFEED

WDT中断

当VICIntEnable[0] = 0时,通道0中断禁止,分配为IRQ中断。

当VICIntEnable[0] = 1时,通道0中断使能,即WDT中断使能。分配为FIQ中断。

十、PWM

PWM的特性:

1.独立的32位定时器/计数器

2.7个匹配寄存器,可实现6路单边沿PWM输出,或3路双边沿PWM输出,或两者的混合输出

3.所有PWM输出的频率都是相同的

4.脉冲周期和宽度可以是任意的定时器计数值

5.匹配寄存器更新与脉冲输出同步,防止产生错误脉冲

6.如果不能使PWM模式,PWM定时器可作为一个标准定时器使用

    PWM结构:

PWM寄存器描述

1.PWM中断寄存器PWMIR:如果有中断产生,PWMIR中的对应位会置位,否则为0。

2 PWM定时器控制寄存器.PWMTCR:控制PWM定时/计数器功能(禁止或复位)。

        PWMTCR=0x09;

3. PWM定时器计数器PWMTC:当预分频计数器到达技术的上限时,32位定时器计数器TC加1.如果PWMTC在到达技术上限之前没有被复位,将一直技术到0*FFFF FFFF,然后翻转到0*0000 0000,该事件不会产生中断。

4. PWM预分频控制寄存器PWMPR:32位预分频寄存器指定了预分频寄存器的最大值。

5. PWM预分频计数器PWMPC:为32位计数器,计数频率为PCLK,当计数值等于预分频计数器的值时,PCLK周期加1。

6.PWM匹配寄存器PWMMR0~PWMMR6:与PWM定时器计数值相比较,当两个值相等时自动触发相应动作。

7.PWM匹配控制寄存器PWMMCR:用于控制当发生匹配时所执行的操作。

8.PWM控制寄存器PWMPCR:用于使能并选择每个PMW的通道类型。

9.PWM锁存使能寄存器PWMLER:当PWM匹配寄存器用于产生PWM时,用于控制PWM匹配寄存器的更新。

PWM基本操作方法:

1.连接PWM功能引脚输出,即设置PINSEL0,PINSEL1。

2.设置PWM定时器的时钟分频,得到所要的定时器时钟。

3.设置比较匹配控制(PWMMCR),并设置相应比较值(PWMMRx)

4.设置PWM输出方式并允许PWM输出(PWMPCR)及锁存使能控制(PWMLER);

5.设置PWMTCR,启动定时,使能PWM;

6.运行过程中要更改比较值时,更改之后要设置锁存使能。

PWM中断

PWM处于VIC的通道8,中断使能寄存器VICIntEnable用来控制VIC通道中的中断使能。当VICIntEnable[8] =1时,通道8中断使能,即:PWM中断使能。

        当VICIntSelect[8] = 1时, PWM中断分配为FIQ中断。

        当VICIntSelect[8] = 0时, PWM中断分配为IRQ中断。

    当分配为IRQ时,还需要设置对应的通道控制寄存器和地址寄存器。

相关推荐