Tiva C TM4C123GXL接口库

时间:2015-02-08 06:59:10

标签: c arm cortex-m cmsis

我目前正在上网,使用Tiva C TM4C123GXL LaunchPad的UT.6.02x嵌入式系统 - 塑造世界。我还在阅读这本书和#34; ARM Cortex-M3和Cortex-M4处理器的权威指南"补充。在书中提到了一个名为CMSIS的标准库,其中GPIO端口'寄存器实现为结构。

图书代码:

typedef struct
{
_IO uint32_t CRL;
_IO uint32_t CRH;
//and so on ...
} GPIO_TypeDef;

#define PERIPH_BASE ((uint32_t)0x40000000) //Peripheral base address
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)
#define GPIOA ((GPIO_TypeDef*) GPIOA_BASE)

其中_IO被定义为volatile。

如果我想将GPIOA CRL寄存器设置为0,我可以键入GPIOA-> CRL = 0; 我还可以调用GPIO_Reset(GPIOA)等函数。

对于班级,教授没有使用这个库,而是包含一个头文件tm4c123gh6pm.h,它分别为每个端口定义每个寄存器:

课程代码:

#define GPIO_PORTA_DATA_BITS_R  ((volatile unsigned long *)0x40004000)
#define GPIO_PORTA_DATA_R       (*((volatile unsigned long *)0x400043FC))
#define GPIO_PORTA_DIR_R        (*((volatile unsigned long *)0x40004400))
#define GPIO_PORTA_IS_R         (*((volatile unsigned long *)0x40004404))
#define GPIO_PORTA_IBE_R        (*((volatile unsigned long *)0x40004408))
#define GPIO_PORTA_IEV_R        (*((volatile unsigned long *)0x4000440C))
#define GPIO_PORTA_IM_R         (*((volatile unsigned long *)0x40004410))
#define GPIO_PORTA_RIS_R        (*((volatile unsigned long *)0x40004414))
#define GPIO_PORTA_MIS_R        (*((volatile unsigned long *)0x40004418))
#define GPIO_PORTA_ICR_R        (*((volatile unsigned long *)0x4000441C))
#define GPIO_PORTA_AFSEL_R      (*((volatile unsigned long *)0x40004420))
#define GPIO_PORTA_DR2R_R       (*((volatile unsigned long *)0x40004500))
#define GPIO_PORTA_DR4R_R       (*((volatile unsigned long *)0x40004504))
#define GPIO_PORTA_DR8R_R       (*((volatile unsigned long *)0x40004508))
#define GPIO_PORTA_ODR_R        (*((volatile unsigned long *)0x4000450C))
#define GPIO_PORTA_PUR_R        (*((volatile unsigned long *)0x40004510))
#define GPIO_PORTA_PDR_R        (*((volatile unsigned long *)0x40004514))
#define GPIO_PORTA_SLR_R        (*((volatile unsigned long *)0x40004518))
#define GPIO_PORTA_DEN_R        (*((volatile unsigned long *)0x4000451C))
#define GPIO_PORTA_LOCK_R       (*((volatile unsigned long *)0x40004520))
#define GPIO_PORTA_CR_R         (*((volatile unsigned long *)0x40004524))
#define GPIO_PORTA_AMSEL_R      (*((volatile unsigned long *)0x40004528))
#define GPIO_PORTA_PCTL_R       (*((volatile unsigned long *)0x4000452C))
#define GPIO_PORTA_ADCCTL_R     (*((volatile unsigned long *)0x40004530))
#define GPIO_PORTA_DMACTL_R     (*((volatile unsigned long *)0x40004534))

这似乎使寄存器操作更麻烦。

这个头文件是否在除此类之外的其他地方使用?它被认为是CMSIS的一部分吗?

两个文件有什么区别?

3 个答案:

答案 0 :(得分:2)

简短的回答:芯片中的GPIO硬件由TI设计而不是ARM ,因此其标头的编码风格略有不同。

更长的解释

使用Cortex-M微控制器时,跟踪哪些部分硬件是由ARM设计的,哪些是由授权ARM处理器(本例中为TI)的芯片供应商设计的。 ARM设计了CPU以及调试和跟踪相关的硬件模块(你甚至可以用来做一些I / O,例如SWD),但其他一切,GPIO,定时器,PWM,ADC,UART,SPI,I2S都是由硅完成的供应商。因此,即使简单的低级blink示例也不会从TI移植到ST,NXP或Atmel芯片,即使它们是所有Cortex-M微控制器。

ARM拥有CMSIS-Driver计划,旨在为公共外围设备创建统一的API,但它基本上已经死了。对于可移植的高级API,请查看mBedArduino项目。

答案 1 :(得分:1)

该类中使用的文件不被视为CMSIS的一部分。如果您想知道如何设置环境来创建符合CMSIS标准的软件,请查看这个简短的教程https://www.youtube.com/watch?v=jQZi81O3cMc&list=PLmfT_cdP5PYBWYvK_bCdGyBqQEiRzUPeq&index=11

答案 2 :(得分:-1)

实际上该文件来自德州仪器公司,可与TivaWare Bundle一起使用

http://www.ti.com/tool/SW-TM4C