在线时间96 小时
UID3167208
注册时间2015-10-21
NXP金币0
TA的每日心情 | 开心 2019-3-22 20:15 |
---|
签到天数: 21 天 连续签到: 1 天 [LV.4]偶尔看看III
高级会员

- 积分
- 909
- 最后登录
- 2019-4-7
|

楼主 |
发表于 2016-11-24 20:18:09
|
显示全部楼层
本帖最后由 噬猎者 于 2016-11-24 20:30 编辑
2 工程文件讲解为方便用户更好地理解和操作寄存器编程方法,这里着重讲解一下下面这些文件,以后编程可以按照这一流程编写其他类型的处理器 
1.首先特别指出includes.h文件,这里放置重定义文件和相应的启动头文件以及用户的头文件,由于寄存器编程所以开放性比较强,建议按照此规则更改文件中的内容。 由于core内核中有中断向量初始化函数,我们如果需要更换器件就需要更改CMSIS的IRQn_Type结构体中的内容。相应的内核特殊功能定义也要对应更改,这里我已经为大家更改好了,大家可以直接使用。
- /********************************************************************************************************/
- #ifndef __INCLUDES_H
- #define __INCLUDES_H
- #ifdef __cplusplus
- extern "C" {
- #endif
- /*********************************************************************************************************
- 通用数据类型重定义
- *********************************************************************************************************/
- typedef unsigned char BOOLEAN; /* 布尔变量 */
- typedef unsigned char INT8U; /* 无符号8位整型变量 */
- typedef signed char INT8S; /* 有符号8位整型变量 */
- typedef unsigned short INT16U; /* 无符号16位整型变量 */
- typedef signed short INT16S; /* 有符号16位整型变量 */
- typedef unsigned long INT32U; /* 无符号32位整型变量 */
- typedef signed long INT32S; /* 有符号32位整型变量 */
- typedef unsigned long long INT64U; /* 无符号64位整型变量 */
- typedef signed long long INT64S; /* 有符号64位整型变量 */
- typedef float FP32; /* 单精度浮点数(32位长度) */
- typedef double FP64; /* 双精度浮点数(64位长度) */
- typedef unsigned char uint8; /* 无符号8位整型变量 */
- typedef unsigned short int uint16; /* 无符号16位整型变量 */
- typedef unsigned long int uint32; /* 无符号32位整型变量 */
- typedef unsigned long long uint64; /* 无符号64位整型变量 */
- typedef char int8; /* 有符号8位整型变量 */
- typedef short int int16; /* 有符号16位整型变量 */
- typedef int int32; /* 有符号32位整型变量 */
- typedef signed long long int64; /* 有符号64位整型变量 */
- typedef volatile int8 vint8; /* 8 bits */
- typedef volatile int16 vint16; /* 16 bits */
- typedef volatile int32 vint32; /* 32 bits */
- typedef volatile uint8 vuint8; /* 8 bits */
- typedef volatile uint16 vuint16; /* 16 bits */
- typedef volatile uint32 vuint32; /* 32 bits */
- /*********************************************************************************************************
- Standard header files 标准头文件
- *********************************************************************************************************/
- #include <stdio.h>
- #include <stdint.h>
- #include <string.h>
- #include <ctype.h>
- #include <stdlib.h>
- #include <stdbool.h>
- #include <math.h>
- /*********************************************************************************************************
- CMSIS 头文件
- *********************************************************************************************************/
- typedef enum {
- /****** Cortex-M0 Processor Exceptions Numbers ***************************************************/
- Reset_IRQn = -15, /*!< 1 Reset Vector, invoked on Power up and warm reset */
- NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */
- HardFault_IRQn = -13, /*!< 3 Cortex-M0 Hard Fault Interrupt */
- SVCall_IRQn = -5, /*!< 11 Cortex-M0 SV Call Interrupt */
- PendSV_IRQn = -2, /*!< 14 Cortex-M0 Pend SV Interrupt */
- SysTick_IRQn = -1, /*!< 15 Cortex-M0 System Tick Interrupt */
- /****** LPC8xx Specific Interrupt Numbers ********************************************************/
- SPI0_IRQn = 0, /*!< SPI0 */
- SPI1_IRQn = 1, /*!< SPI1 */
- Reserved0_IRQn = 2, /*!< Reserved Interrupt */
- UART0_IRQn = 3, /*!< USART0 */
- UART1_IRQn = 4, /*!< USART1 */
- UART2_IRQn = 5, /*!< USART2 */
- Reserved1_IRQn = 6, /*!< Reserved Interrupt */
- I2C1_IRQn = 7, /*!< I2C1 */
- I2C0_IRQn = 8, /*!< I2C0 */
- I2C_IRQn = 8, /*!< Alias for I2C0 */
- SCT_IRQn = 9, /*!< SCT */
- MRT_IRQn = 10, /*!< MRT */
- CMP_IRQn = 11, /*!< CMP */
- WDT_IRQn = 12, /*!< WDT */
- BOD_IRQn = 13, /*!< BOD */
- FLASH_IRQn = 14, /*!< Flash interrupt */
- WKT_IRQn = 15, /*!< WKT Interrupt */
- ADC_SEQA_IRQn = 16, /*!< ADC sequence A completion */
- ADC_SEQB_IRQn = 17, /*!< ADC sequence B completion */
- ADC_THCMP_IRQn = 18, /*!< ADC threshold compare */
- ADC_OVR_IRQn = 19, /*!< ADC overrun */
- DMA_IRQn = 20, /*!< Reserved Interrupt */
- I2C2_IRQn = 21, /*!< Reserved Interrupt */
- I2C3_IRQn = 22, /*!< Reserved Interrupt */
- Reserved2_IRQn = 23, /*!< Reserved Interrupt */
- PININT0_IRQn = 24, /*!< External Interrupt 0 */
- PIN_INT0_IRQn = 24, /*!< External Interrupt 0 (alias) */
- PININT1_IRQn = 25, /*!< External Interrupt 1 */
- PIN_INT1_IRQn = 25, /*!< External Interrupt 1 (alias) */
- PININT2_IRQn = 26, /*!< External Interrupt 2 */
- PIN_INT2_IRQn = 26, /*!< External Interrupt 2 (alias) */
- PININT3_IRQn = 27, /*!< External Interrupt 3 */
- PIN_INT3_IRQn = 27, /*!< External Interrupt 3 (alias) */
- PININT4_IRQn = 28, /*!< External Interrupt 4 */
- PIN_INT4_IRQn = 28, /*!< External Interrupt 4 (alias) */
- PININT5_IRQn = 29, /*!< External Interrupt 5 */
- PIN_INT5_IRQn = 29, /*!< External Interrupt 5 (alias) */
- PININT6_IRQn = 30, /*!< External Interrupt 6 */
- PIN_INT6_IRQn = 30, /*!< External Interrupt 6 (alias) */
- PININT7_IRQn = 31, /*!< External Interrupt 7 */
- PIN_INT7_IRQn = 31, /*!< External Interrupt 7 (alias) */
- } IRQn_Type;
- /*
- * ==========================================================================
- * ----------- Processor and Core Peripheral Section ------------------------
- * ==========================================================================
- */
- /* Configuration of the Cortex-M0+ Processor and Core Peripherals */
- #define __CM0PLUS_REV 0x0001 /*!< Cortex-M0+ Core Revision */
- #define __MPU_PRESENT 0 /*!< MPU present or not */
- #define __VTOR_PRESENT 1 /*!< VTOR is present in this implementation */
- #define __NVIC_PRIO_BITS 2 /*!< Number of Bits used for Priority Levels */
- #define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */
- /*********************************************************************************************************
- Common's header files 公共头文件
- *********************************************************************************************************/
- #include "MemMapPtr_LPC8XX.h"
- #include "system_LPC8XX.h"
- //CORE_CM0内核文件
- #include "core_cm0.h"
- /*********************************************************************************************************
- Driver's header files 驱动头文件
- *********************************************************************************************************/
- #include "Init.h"
- #include "Uart.h"
- #ifdef __cplusplus
- }
- #endif
- #endif
- /*********************************************************************************************************
- END FILE
- *********************************************************************************************************/
复制代码 2.startup_LPC8xx.s启动文件,启动文件务必选择KEIL的S文件。启动代码是一段和硬件相关的汇编代码。是必不可少的!这代码主要作用如下:1、堆栈(SP)的初始化;2、初始化程序计数器(PC) ;3、设置向量表异常事件的入口地址;4、调用system、 main 函数。感兴趣的朋友可以自己去分析这部分代码。
对于LPC824的启动文件启动后,首先执行的是 SystemInit 函数,该函数的功能是初始化时钟配置,是我们寄存器开发学习中比较重要的一项。
3.MemMapPtr_LPC8xx.h寄存器代码库,这里是我们需要编写寄存器地址和结构体枚举的文件,所有寄存器的调用都是通过该文件实现的。下一步我们会重点教会大家编写该文件的内容。
可以参考我新建的空工程进行进一步学习:
1.空工程.zip
(23.61 KB, 下载次数: 18)
|
|