当前位置:
文档之家› 嵌入式系统原理与实践-第06章 系统外设 2018
嵌入式系统原理与实践-第06章 系统外设 2018
基本外设
2019/6/7
华东师范大学计算机系
1
基本模块
GPIO 通用定时器/计数器 PWM WDT RTC
2019/6/7
2
基本模块
GPIO 通用定时器/计数器 PWM WDT RTC
2019/6/7
3
外设模块——GPIO
GPIO
GPIO(General Purpose I/O),通用输入输出端口。
2019/6/7
15
外设模块——GPIO
MSP432中的GPIO
2019/6/7
16
外设模块——GPIO
初始化配置
GPIO工作方向——输入、输出 GPIO模式——推拉、开漏、上下拉等 GPIO复用 GPIO中断
2019/6/7
17
外设模块——GPIO
操作实例
程序功能:使用按键控制LED 灯的亮灭
2019/6/7
21
Timer/Counter
基本结构
只写,载入计数器 的初始计数值
只写,多数为减法计数器。设 定初值后,减法计数,减到0溢
出,产生溢出或中断信号
只写,设置定时器/计数 器的工作方式、控制其
工作
由控制寄存器控制 其工作
只读,记录计数器当 前的计数值
2019/6/7
只读,存放计数器的 工作状态
int main(void)//主程序
{
MAP_WDT_A_holdTimer(); //关闭看门狗
MAP_GPIO_setAsOutputPin(GPIO_PORT_P1,GPIO_PIN0);//将P1.0配置为输出
MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1,GPIO_PIN1);//P1.1配置为输入
MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P1,GPIO_PIN0); //翻转LED 状态 } }
2019/6/7
19
基本模块
GPIO 通用定时器/计数器 PWM WDT RTC
2019/6/7
20
Timer/Counter
应用
定时器模块是应用系统中经常用到的重要部分,可以用在如下 方面: 嵌入式操作系统的任务调度 嵌入式操作的系统的软件时钟需要基于硬件定时器产生定时信号 通信电路的波特率发生器 实时时钟电路 一些智能芯片如DMA控制器等 具有液晶控制器的嵌入式处理器用于液晶的刷新 处理器监控电路如看门狗等 A/D和D/A转换等 集成的动态存储器控制器用于动态存储器的刷新
22
Timer/Counter
工作模式
单次计数模式:计数器计数到0 就产生中断并停止计数
循环计数模式:每次计数器计数到0 便产生一次中断,随后重 新载入初始值计数器的值,继续计数
2019/6/7
23
Timer/Counter
特性
有些定时器还具有以下特性: 输入捕获; 输出比较; 脉宽调制模式PWM(Pulse width modulation mode);
I/O端口配置
输入禁用的推拉输出:
• PINCFGy. PULLEN位置为0——禁用内部上(下)拉电阻 • PINCFGy. INEN位置为0——禁用I/O引脚的内部缓存 • DIR的第y位置为1——将I/O引脚设置为输出
2019/6/7
13
外设模块——GPIO
I/O端口配置
上(下)拉输出:
应用
GPIO基本都是用于芯片与片外器件或设备的交互
检测数字输入,如键盘或开关信号; 驱动LED,蜂鸣器或LCD等其他指示器; 控制片外器件,较高级的使用可以用它们(通过 程序)模拟很多器件的时序达到控制相应器件的 目的,比如模拟SPI和模拟总线等。
2019/6/7
4
外设模块——GPIO
特性
• 单次定时器模式:指计数器只产生一次中断,即计数器计数至 0 时,定时器挂起,直到用户对其进行重新编程
2019/6/7
27
Timer/Counter
MSP432中的定时器——TimerA
4个TimerA模块 每个 TimerA模块有7个捕获/比较寄存器 支持中断 时钟源——ACLK、SMCLK 、TAxCLK 、INCLK 四种计数模式——连续计数模式、增计数模式、增减计数
MAP_SysCtl_enableSRAMBankRetention(SYSCTL_SRAM_BANK1);
MAP_Interrupt_enableMaster();
while(1)
{
MAP_PCM_gotoLPM3();//进入LPM3模式,等待中断
}
}
2019/6/7
18
外设模块——GPIO
操作实例
• PINCFGy. PULLEN位置为1——使能内部上(下)拉电阻 • PINCFGy. INEN位置为0——禁用I/O引脚的内部缓存 • DIR的第y位置为0——将I/O引脚设置为输入
2019/6/7
14
外设模块——GPIO
I/O端口配置
复位或模拟I/O:
• PINCFGy.PULLEN位置为0——禁用内部上(下)拉电阻 • PINCFGy.INEN位置为0——禁用I/O引脚的内部缓存 • DIR的第y位置为0——将I/O引脚设置为输入
此时,如果将PA0配置为输出,且输出为‘1’,那么就 容易造成短路,将PA0烧坏。
2019/6/7
6
外设模块——GPIO
寄存器概述
GPIO口都是按组规划,有的芯片是8个GPIO口一 组,有的是16个或32个为一组。一般每个GPIO口都需 要做两个寄存器位:一是选择口线方向(输入输出)二 是需要一个数据位(用于设置输出数据和读取输入数 据)。所以一组GPIO口至少会有两个寄存器 GPIOxDIR和GPIOxDATA。
不确定0 状态。1 0
X
输入
0 引脚的1 配置1与相应寄0 存器下拉设输入置间的关系如下:
0
1
1
1
上拉输入
1
0
X
X
输出;输入禁用
1
1
X
X
输出;输入使能
2019/6/7
10
外设模块——GPIO
I/O端口配置
标准输入:
• PINCFGy.PULLEN位置为0——禁用内部上(下)拉电阻 • PINCFGy.INEN位置为1——使能I/O引脚的内部缓存 • DIR的第y位置为0——将I/O引脚设置为输入
2019/6/7
33
Timer/Counter
操作实例
程序功能:控制LED 灯定时闪烁,时间周期为1 秒。 int main(void) { MAP_WDT_A_holdTimer(); //设置时钟 MAP_CS_setReferenceOscillatorFrequency(CS_REFO_128KHZ); MAP_CS_initClockSignal(CS_MCLK,CS_REFOCLK_SELECT,CS_CLOCK_DIVIDER_1); MAP_PCM_setPowerState(PCM_AM_LF_VCORE0); //设置 GPIO,将P1.0 设为输出引脚,P1.1 设为输入引脚,并使能中断 MAP_GPIO_setAsOutputPin(GPIO_PORT_P1,GPIO_PIN0); MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1,GPIO_PIN0); MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1,GPIO_PIN1); MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1,GPIO_PIN1); MAP_GPIO_enableInterrupt(GPIO_PORT_P1,GPIO_PIN1);
输入缓冲
8
外设模块——GPIO
寄存器概述
注: 数据输入寄存器和数据输出寄存器合用一个地址,
但实际为两个物理地址。
例:Sbuf = 5;//Sbuf 为输出寄存器 i = Sbuf; // Sbuf 为输入寄存器
此时 i = 5 ?
2019/6/7
9
外设模块——GPIO
I/O端口配置
I/O端口寄存器中的PINCFGy寄存器、DIR寄存器以
MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1,GPIO_PIN1);//清除中断标志
MAP_GPIO_enableInterrupt(GPIO_PORT_P1,GPIO_PIN1);//使能按键中断
MAP_Interrupt_enableInterrupt(INT_PORT1);//使能端口中断
模式、停止
2019/6/7
28
Timer/Counter
MSP432中的定时器——TimerA
2019/6/7
29
Timer/Counter
MSP432中的定时器——TimerA
连续计数模式
中断
中断
中断
2019/6/7
30
Timer/Counter
Hale Waihona Puke MSP432中的定时器——TimerA
25
Timer/Counter
功能-输出比较
当定时器中的值与输出比较(匹配)寄存器中的值 相等时,可以在输出管脚输出指定的信号。如果用户开 启中断,那么也产生一个中断。
2019/6/7
信号输出 匹配控制寄存器
Tx定时器 =
匹配寄存器
当定时器值等于预设 的匹配值时,从引脚 输出特定的信号