【Tiva_C系列】二、TM4C123GH6PM 微控制器

0 TM4C123GH6PM简介

  微控制器是由处理器(CPU) 和存储器、以及一些外设(peripheral) 集成到一片芯片里组成的。 外设和 CPU 相对独立, 且以寄存器的形式呈现给 CPU, CPU 通过总线对寄存器进行读写, 实现对外设的配置和数据通信。 常用的外设包括通用输入输出 GPIO、 定时器 TIMER、模拟输入输出(ADC、 DAC)、 串行通信(UART、 SSI、 I2C、 CAN) 等等。

  本文是基于TM4C123x系列微控制器的简单入门教程。TM4C123x 系列是 TI 公司推出的一款基于 ARM Cortex-M4F 的微控制器;其率先采用65 纳米闪存工艺技术构建、工作速率达 80 MHz,TM4C123x 也包含了高达 256KB Flash 及32KB SRAM。本文主要介绍TM4C123GH6PM微控制器。

表1 TM4C123GH6PM

在这里插入图片描述

  其结构图如下:
在这里插入图片描述

图1 TM4C123GH6PM 结构图

  从图中可看出, DMA 和 GPIO 可通过 AHB 和 APB 总线访问, EEPROM 和 USB OTG只能通过 AHB 总线访问,其它外设则只能通过 APB 总线访问。

  其引脚图如下:
TM4C123GH6PM引脚图

图2 TM4C123GH6PM 引脚图

1 硬件最小电路

  MCU 硬件最小电路是指保障 MCU 能正常运行的最小电路,它包括了电源、晶振、复位以及写入调试接口等电路。
在这里插入图片描述

图3 硬件最小电路

1.1 电源

  TM4C123GH6PM 微控制器提供一个集成的 LDO 稳压器,用于给大多数微控制器的内部逻辑提供电源。图描述了电源架构。外部 LDO 不得使用。
  VDDA 是可用于设备上的所有的模拟电路,包括时钟电路,典型值 3.3V。
  VDD:I/O 和某些逻辑的电源,典型值 3.3V。
  VDDC:为主要的逻辑部分(包括处理器内核以及大部分片上外设)的电源。该管脚上的电压为 1.2V,由片上 LDO 提供。
  VBAT:休眠模块的电源供应源,它通常连接到电池的正极端并用作备用电池,典型值3.3V。
在这里插入图片描述

图4 电源结构

1.2 复位

  复位就是使处理器恢复到起始状态。TM4C123GH6PM 有 6 种复位方式:
  1)上电复位 PRO (Power-onReset) : 当器件上电以及从休眠模式唤醒时产生复位。
  2)外部复位引脚/RST 引脚 /RST 低电平时会产生复位。
  3)内部掉电复位 BOR(Brown-on Detector):当电源 VDD 低于门限电压 VBTH 时,系统将产生一个复位或中断。
  4)软件复位:软件即可以使整个器件复位,也可以单独使内核或某个外设复位。
  5)看门狗定时器复位:看门狗定时器第二次产生中断时复位。
  6)MOSC 失效复位:当主振荡器运行太快或太慢时将产生错误,称为 MOSC 失效,此时将产生复位。
  复位后,会根据 BOOTCFG 寄存器中的配置及相应的 GPIO 信号,决定执行 ROM 中的 Boot Loader 或是 FLASH 上的应用程序。如果从 FLASH 启动,则会从 0X000 0004 地址的复位向量开始执行。
  外部复位引脚/RST 电路如下图所示:复位引脚/RST 通过一个上拉电阻接到电源正极,平时为高电平,按下按键为低电平;为了抗干扰,通常在/RST 引脚连接 RC 电路进行滤波。
在这里插入图片描述

图5 复位电路

1.3 时钟(System Clock)

1.3.1 基本时钟源

  微控制器中使用了多个时钟源:
  内部高精度振荡器(PIOSC):该振荡器是片上时钟源,它无需使用任何外部组件。提供震荡频率是 16MHz,在室温下精度为 1%,在全温下精度为 3%。
  外部主振荡器(MOSC):可以使用外部接入的晶振,也可以使用外部输入的单端时钟源。
  内置低频振荡器(LFIOSC):频率为 30kHz,精度比较低,为 50%。当系统进入一个深度睡眠的低功耗模式时可以使用该振荡器。
  休眠模式时钟源:频率为 32.768Hz,由外部接入。该时钟源用于实时时钟,或者为深度睡眠或休眠节能模式提供准确的时钟。
  系统时钟不仅有以上四种选择,还可以选择一下两种时钟选择:
  内部 PLL:震荡源频率应控制在 5MHz——25MHz 之间。
  内部高精度振荡器 4 分频(4MHz):精度为 1%。

表2 时钟源

在这里插入图片描述

1.3.2 初始化和配置

在这里插入图片描述

图6 时钟树

  对 PLL 的配置可通过直接对 RCC/RCC2 寄存器执行写操作来实现。如果要使用 RCC2 寄存器,那么必须置位 USERCC2 位。成功改变基于 PLL 的系统时钟所需的步骤如下:
  1)通过置位 RCC 寄存器的 BYPASS 位并清零 USESYS 位来旁路 PLL 和系统时钟分频器,从而配置微控制器在“原始”时钟源运行,在切换系统时钟到 PLL 前允许新的 PLL 配置有效。
  2)选择晶振值(XTAL)和振荡器源 (OSCSRC),清零 RCC/RCC2 的 PWRDN 位。设置XTAL 域可以自动为相应晶振提供有效的 PLL 配置数据,清零 PWRDN 位可以给 PLL 及其输出供电并启用它们。
  3)在 RCC/RCC2 中选择需要的系统分频器(SYSDIV)并在 RCC 中置位 USESYS 位。SYSDIV 域决定了微控制器的系统频率。
  4)通过查询原始中断状态(RIS)寄存器的 PLLLRIS 位来等待 PLL 被锁定。
  5)通过清零 RCC/RCC2 的 BYPASS 位来启用 PLL。

1.3.3 时钟库函数

  TivaWare 提供了一个非常简单的 API,就可以方便的实现时钟系统的配置。
  tivaware 目录下\inc\hw_sysctl.h 给出了 sysctl 下各寄存器的地址、及寄存器各位域的定义和各位域可能的取指定义。

1.3.3.1 函数 SysCtlClockSet

  功能:设置设备的时钟
  原型:void SysCtlClockSet(uint32_t ui32Config); 参数:ui32Config 为设备时钟所需要的配置。
  描述:该函数功能配置了设备的时钟,如:输入晶振频率、振荡器、PLL、系统时钟分频等。参数 ui32Config 是几个不同值的逻辑或,它们分别都被分成多个组,其中在每个组中只能选择一个值。
  振荡器的选择为如下之一:SYSCTL_OSC_MAIN,SYSCTL_OSC_INT, SYSCTL_OSC_INT4,SYSCTL_OSC_INT30,SYSCTL_OSC_EXT32。SYSCTL_OSC_EXT32 仅应用于拥有休眠模式的设备,而且只有当休眠模式使能时才有效。
  PLL 选择:SYSCTL_USE_PLL(使用 PLL)或者 SYSCTL_USE_OSC(不使用 PLL)。当 PLL 工作时,且 PLL 的时钟源为外部主振荡器时,需告知 PLL 外部主振荡器的频率,如:
  SYSCTL_XTAL_4MHZ,… SYSCTL_XTAL_25MHz。参数值低于 SYSCTL_XTAL_5MHZ 是无效的。系统时钟分频器选择为以下值之一:SYSCTL_SYSDIV_1,… SYSCTL_SYSDIV_64。设置外部时钟源(主时钟)作为系统的时钟时使用SYSCTL_USE_OSC|SYSCTL_OSC_MAIN。设置 PLL 作为系统的时钟源时使用 SYSCTL_USE_PLL|SYSCTL_OSC_MAIN,并需要设置正确的晶振频率 SYSCTL_XTAL_xxx 的值。例如:
  SysCtlClockSet(SYSCTL_SYSDIV_4|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN)使用 PLL 输出固定 200M,再 4 分频,系统时钟 50M。

1.3.3.2 函数 SysCtlPeripheralEnable

  功能:使能外设。
  原型:void SysCtlPeripheralEnable(uint32_t ui32Peripheral);
  参数:ui32Peripheral 是要使能的外设
  描述:函数的功能是使能一个外设。上电时,所有外设为失能状态;它们必须在使能后才能操作或响应寄存器的读/写。
  外设参数必须为一下参数之一: SYSCTL_PERIPH_ADC0,SYSCTL_PERIPH_ADC1,SYSCTL_PERIPH_GPIOA,SYSCTL_PERIPH_GPIOB,SYSCTL_PERIPH_GPIOC,SYSCTL_PERIPH_GPIOD,SYSCTL_PERIPH_GPIOE,SYSCTL_PERIPH_GPIOF, SYSCTL_PERIPH_HIBERNATE…其余参数请查看外设驱动库文档。
  注:写使能外设后,要经过 5 个时钟周期外设才真正被使能。在这期间,试图访问外设将导致总线错误。要注意确保在这段时间内,外设不能够被访问。

1.3.3.3 函数 SysCtlClockGet

  功能:获取处理器时钟频率。
  原型:uint32_t SysCtlClockGet(void);参数:无
  描述:该函数获得处理器时钟频率和外设模块的时钟频率(除了 PWM,它有自己的时钟分配,其他外设有不同的时钟)。

2 存储器及映射

  TM4C123GH6PM 微控制器带有 32KB 的 SRAM、内部 ROM、256KB 的 flash 和 2KB 的 EEPROM。Cortex-M4F 系列处理器对内存和外设进行了统一编址,存储器映射列出指令和数据在存储器中的位置,FLASH、ROM、SRAM 和外设对应的地址如下:

表3 存储器映射

在这里插入图片描述

2.1 位带(Bit-band)

  位带操作,可以对单一的位(bit)进行读写。在CM4中,有两个区中实现了位带。其中一个是SRAM区的最低1MB范围,第二个则是片内外设区的最低1MB范围。这两个区中的地址除了可以像普通的RAM一样使用外,它们还都有自己的“位带别名区”,位带别名区把每个位(bit)膨胀成一个32位的字。当你通过位带别名区访问这些字时,就可以达到访问原始位(bit)的目的。
  SRAM 和外设的位带基址分别为 0x2200.0000 和 0x42000000。位带别名地址的计算公式为:位带别名地址=基地址+(偏移量32)+ (位编号4) 例如:如果要修改 SRAM 地址 0x20001000 的第 3 位,则位带别名地址计算如下:
  位带别名地址=0x22001000 +(0x1000 32)+ (34) =0x2202000C 因此,当需要读/写位带地址 0x20001000 的第 3 位时,只需要对相应的位带别名地址 0x2202000C 执行读/写操作指令即可。
在这里插入图片描述

图7 位带

  Tivaware目录下的inc/hw_types.h定义了位带的变换,例如:
  #define HWREGBITW(x,b)
  HWREG(((uint32_t)(x)&0xF0000000)|0x02000000|(((uint32_t)(x)&0x000FFFFF) <<5)|((b)<<2))

2.2 SRAM

  SRAM 是易失性存储器,掉电后数据会丢失,适合存储需要经常修改的数据。随机存取存储器,可对存储器的任一个存储单元按需要随时进行信息读出或写入,且读/写速度快。

2.3 ROM

  ROM 是非易失性存储器,只能读出,不能用一般的方法写入。TM4C123GH6PM 的 ROM 已预编程,包含以下组件:
TivaWare 引导加载程序 Boot Load 和向量表; TivaWare 外围设备的驱动程序库(DriverLib);高级加密标准(AES)加密表;循环冗余检查(CRC) 错误检测功能。

2.4 Flash

  FLASH 是非易失性存储器,掉电后数据不会丢失,适合存储程序和不经常修改的数据。当系统时钟速度为 40 MHz 或更慢时,闪存在一个周期中即被读取。当处理器系统时钟大于 40MHz 时,FLASH 控制器将启用预取缓存器。在这种模式下,Flash 存储器以一半的系统时钟工作,预取缓存器每个时钟周期读取两个 32 位的字,使得在代码执行的同时,指令提取无须等待状态。
  Flash 存储器由一系列 1KB 的块组织在一起,这些块可以被单独擦除。flash 器件的写入操作只能在空或已擦除的单元内进行,所以很多时候,在进行写入操作之前必须先执行擦除。擦除块会使块中所有内容块被重置为 1。
  1KB 的块可成对配成 2K 的块形成保护块。保护允许块将被标记为只读或只执行,系统可提供不同级别的代码保护。只读块不能被删除或编程,系统可保护这些块的内容不被修改。同时,只执行块不能被删除或编程,不能被控制器或调试器读取,只能通过控制器取值机制来读取它的内容。

2.5 EEPROM

  EPPROM 是非易失性存储器,掉电后数据不会丢失,适合存储不经常修改的数据。Tiva 的 EEPROM 模块接口为用户提供了随机访问以及顺序访问的读写样式。同时,EEPROM 模块提供了对块的锁定机制,可防止在特殊情况下对块的读写操作保护。密码存取模式使用户程序可锁定 16 字对齐的一个或多个 EEPROM 块控制访问。
  每个 EEPROM 由 32 块组成,每块由 16 个字组成。对 EEPROM 的读取可以是按字节或半字长,并且,这些读取操作也不需要依照字边界对齐。每次读取,会读取整个字长,任何不需要的数据将被简单地忽略。每次写入必须要按字对齐。要向 EEPROM 写入一个字节,应先读出值,修改相应的字节,再进行回写。
  EEPROM 的每个块都是根据偏移量寻址的,可通过块选择寄存器对操作的块进行选择。当前操作的块由当前块寄存器EEBLOCK决定,当前偏移量由当前寄存器EEOFFSET决定。 EEPROM 的块是受单独保护的。若尝试对未受权的块读写将返回 0xFFFF.FFFF 的错误值,并且 EEDONE 寄存器也将被置位。

3 低功耗模式

  为了进行功耗控制,TM4C123GH6PM 有 4 种工作模式:
  正常模式:在该模式下,处理器正常运行代码,外设正常运行。
  睡眠模式:睡眠模式下,停止处理器时钟和存储器时钟,不执行代码,外设时钟频率不变,仍然可以运行。中断事件能使系统回归到运行模式。
  深度睡眠模式:停止系统时钟并关闭 PLL 和 Flash 存储器,不执行代码。外设运行在内置低频振荡器的 30KHz 频率下。在该模式下,中断事件能使系统回归到运行模式。
  休眠模式:处理器和外设的电源都关断,只维持休眠模块的供电。电源供电可以利用外部信号 WAKE 触发恢复,也可以利用内置实时时钟(RTC),在经过一段特定的时间之后恢复。休眠模块可以由外部电池或者辅助电源单独供电。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值