查看: 6113|回复: 2

[原创] 【高校争霸赛】LPC824寄存器开发指南【二】软件篇

[复制链接]
  • TA的每日心情
    开心
    2019-3-22 20:15
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    23

    主题

    341

    帖子

    1

    高级会员

    Rank: 4

    积分
    909
    最后登录
    2019-4-7
    发表于 2016-11-24 19:58:19 | 显示全部楼层 |阅读模式
    LPC824寄存器工程建立:
    1.新建RVMDK工程
      关于MDK软件的安装就不在这讲解了,不过要使用MDK编写LPC8xx系列单片机需要安装PACK包: Keil.LPC800_DFP.1.4.0.zip (9.54 MB, 下载次数: 12)
    成功的小小喜悦里,大脑自身可以产生兴奋剂哦!
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-22 20:15
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    23

    主题

    341

    帖子

    1

    高级会员

    Rank: 4

    积分
    909
    最后登录
    2019-4-7
     楼主| 发表于 2016-11-24 20:18:09 | 显示全部楼层
    本帖最后由 噬猎者 于 2016-11-24 20:30 编辑

    2 工程文件讲解为方便用户更好地理解和操作寄存器编程方法,这里着重讲解一下下面这些文件,以后编程可以按照这一流程编写其他类型的处理器


    1.首先特别指出includes.h文件,这里放置重定义文件和相应的启动头文件以及用户的头文件,由于寄存器编程所以开放性比较强,建议按照此规则更改文件中的内容。 由于core内核中有中断向量初始化函数,我们如果需要更换器件就需要更改CMSIS的IRQn_Type结构体中的内容。相应的内核特殊功能定义也要对应更改,这里我已经为大家更改好了,大家可以直接使用。


    1. /********************************************************************************************************/
    2. #ifndef  __INCLUDES_H
    3. #define  __INCLUDES_H

    4. #ifdef __cplusplus
    5. extern "C" {
    6. #endif


    7. /*********************************************************************************************************
    8.   通用数据类型重定义
    9. *********************************************************************************************************/
    10. typedef unsigned char           BOOLEAN;                                /* 布尔变量                     */
    11. typedef unsigned char           INT8U;                                  /* 无符号8位整型变量            */
    12. typedef signed   char           INT8S;                                  /* 有符号8位整型变量            */
    13. typedef unsigned short          INT16U;                                 /* 无符号16位整型变量           */
    14. typedef signed   short          INT16S;                                 /* 有符号16位整型变量           */
    15. typedef unsigned long           INT32U;                                 /* 无符号32位整型变量           */
    16. typedef signed   long           INT32S;                                 /* 有符号32位整型变量           */
    17. typedef unsigned long long      INT64U;                                 /* 无符号64位整型变量           */
    18. typedef signed long long        INT64S;                                 /* 有符号64位整型变量           */
    19. typedef float                   FP32;                                   /* 单精度浮点数(32位长度)     */
    20. typedef double                  FP64;                                   /* 双精度浮点数(64位长度)     */

    21. typedef unsigned char                    uint8;                                      /* 无符号8位整型变量            */
    22. typedef unsigned short int        uint16;                                     /* 无符号16位整型变量           */
    23. typedef unsigned long int          uint32;                                     /* 无符号32位整型变量           */
    24. typedef unsigned long long  uint64;                                 /* 无符号64位整型变量           */

    25. typedef char                                                    int8;                                       /* 有符号8位整型变量            */
    26. typedef short int                int16;                                      /* 有符号16位整型变量           */
    27. typedef int                            int32;                                      /* 有符号32位整型变量           */
    28. typedef signed long long  int64;                                                         /* 有符号64位整型变量           */

    29. typedef volatile int8                        vint8;                                      /*  8 bits */
    30. typedef volatile int16                vint16;                                     /* 16 bits */
    31. typedef volatile int32                vint32;                                     /* 32 bits */

    32. typedef volatile uint8                vuint8;                                     /*  8 bits */
    33. typedef volatile uint16                vuint16;                                    /* 16 bits */
    34. typedef volatile uint32                vuint32;                                    /* 32 bits */

    35. /*********************************************************************************************************
    36.   Standard header files 标准头文件
    37. *********************************************************************************************************/
    38. #include <stdio.h>
    39. #include <stdint.h>
    40. #include <string.h>
    41. #include <ctype.h>
    42. #include <stdlib.h>
    43. #include <stdbool.h>
    44. #include <math.h>
    45. /*********************************************************************************************************
    46.   CMSIS 头文件
    47. *********************************************************************************************************/
    48. typedef enum {
    49.         /******  Cortex-M0 Processor Exceptions Numbers ***************************************************/
    50.         Reset_IRQn                    = -15,        /*!< 1 Reset Vector, invoked on Power up and warm reset */
    51.         NonMaskableInt_IRQn           = -14,        /*!< 2 Non Maskable Interrupt                           */
    52.         HardFault_IRQn                = -13,        /*!< 3 Cortex-M0 Hard Fault Interrupt                   */
    53.         SVCall_IRQn                   = -5,                /*!< 11 Cortex-M0 SV Call Interrupt                     */
    54.         PendSV_IRQn                   = -2,                /*!< 14 Cortex-M0 Pend SV Interrupt                     */
    55.         SysTick_IRQn                  = -1,                /*!< 15 Cortex-M0 System Tick Interrupt                 */

    56.         /******  LPC8xx Specific Interrupt Numbers ********************************************************/
    57.         SPI0_IRQn                     = 0,                /*!< SPI0                                             */
    58.         SPI1_IRQn                     = 1,                /*!< SPI1                                             */
    59.         Reserved0_IRQn                = 2,                /*!< Reserved Interrupt                               */
    60.         UART0_IRQn                    = 3,                /*!< USART0                                           */
    61.         UART1_IRQn                    = 4,                /*!< USART1                                           */
    62.         UART2_IRQn                    = 5,                /*!< USART2                                           */
    63.         Reserved1_IRQn                = 6,                /*!< Reserved Interrupt                               */
    64.         I2C1_IRQn                     = 7,                /*!< I2C1                                             */
    65.         I2C0_IRQn                     = 8,                /*!< I2C0                                             */
    66.         I2C_IRQn                      = 8,                /*!< Alias for I2C0                                   */
    67.         SCT_IRQn                      = 9,                /*!< SCT                                              */
    68.         MRT_IRQn                      = 10,                /*!< MRT                                              */
    69.         CMP_IRQn                      = 11,                /*!< CMP                                              */
    70.         WDT_IRQn                      = 12,                /*!< WDT                                              */
    71.         BOD_IRQn                      = 13,                /*!< BOD                                              */
    72.         FLASH_IRQn                    = 14,                /*!< Flash interrupt                                  */
    73.         WKT_IRQn                      = 15,                /*!< WKT Interrupt                                    */
    74.         ADC_SEQA_IRQn                 = 16,                /*!< ADC sequence A completion                        */
    75.         ADC_SEQB_IRQn                 = 17,                /*!< ADC sequence B completion                        */
    76.         ADC_THCMP_IRQn                = 18,                /*!< ADC threshold compare                            */
    77.         ADC_OVR_IRQn                  = 19,                /*!< ADC overrun                                      */
    78.         DMA_IRQn                      = 20,                /*!< Reserved Interrupt                               */
    79.         I2C2_IRQn                     = 21,                /*!< Reserved Interrupt                               */
    80.         I2C3_IRQn                     = 22,                /*!< Reserved Interrupt                               */
    81.         Reserved2_IRQn                = 23,                /*!< Reserved Interrupt                               */
    82.         PININT0_IRQn                  = 24,                /*!< External Interrupt 0                             */
    83.         PIN_INT0_IRQn                 = 24,                /*!< External Interrupt 0 (alias)                     */
    84.         PININT1_IRQn                  = 25,                /*!< External Interrupt 1                             */
    85.         PIN_INT1_IRQn                 = 25,                /*!< External Interrupt 1 (alias)                     */
    86.         PININT2_IRQn                  = 26,                /*!< External Interrupt 2                             */
    87.         PIN_INT2_IRQn                 = 26,                /*!< External Interrupt 2 (alias)                     */
    88.         PININT3_IRQn                  = 27,                /*!< External Interrupt 3                             */
    89.         PIN_INT3_IRQn                 = 27,                /*!< External Interrupt 3 (alias)                     */
    90.         PININT4_IRQn                  = 28,                /*!< External Interrupt 4                             */
    91.         PIN_INT4_IRQn                 = 28,                /*!< External Interrupt 4 (alias)                     */
    92.         PININT5_IRQn                  = 29,                /*!< External Interrupt 5                             */
    93.         PIN_INT5_IRQn                 = 29,                /*!< External Interrupt 5 (alias)                     */
    94.         PININT6_IRQn                  = 30,                /*!< External Interrupt 6                             */
    95.         PIN_INT6_IRQn                 = 30,                /*!< External Interrupt 6 (alias)                     */
    96.         PININT7_IRQn                  = 31,                /*!< External Interrupt 7                             */
    97.         PIN_INT7_IRQn                 = 31,                /*!< External Interrupt 7 (alias)                     */
    98. } IRQn_Type;




    99. /*
    100. * ==========================================================================
    101. * ----------- Processor and Core Peripheral Section ------------------------
    102. * ==========================================================================
    103. */


    104. /* Configuration of the Cortex-M0+ Processor and Core Peripherals */
    105. #define __CM0PLUS_REV             0x0001        /*!< Cortex-M0+ Core Revision                          */
    106. #define __MPU_PRESENT             0                        /*!< MPU present or not                               */
    107. #define __VTOR_PRESENT            1                        /*!< VTOR is present in this implementation           */
    108. #define __NVIC_PRIO_BITS          2                        /*!< Number of Bits used for Priority Levels          */
    109. #define __Vendor_SysTickConfig    0                        /*!< Set to 1 if different SysTick Config is used     */

    110. /*********************************************************************************************************
    111.   Common's header files  公共头文件
    112. *********************************************************************************************************/
    113. #include "MemMapPtr_LPC8XX.h"
    114. #include "system_LPC8XX.h"



    115. //CORE_CM0内核文件
    116. #include "core_cm0.h"

    117. /*********************************************************************************************************
    118.   Driver's header files  驱动头文件
    119. *********************************************************************************************************/
    120. #include "Init.h"
    121. #include "Uart.h"





    122. #ifdef __cplusplus
    123. }
    124. #endif

    125. #endif
    126. /*********************************************************************************************************
    127.   END FILE
    128. *********************************************************************************************************/
    复制代码
    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)
    成功的小小喜悦里,大脑自身可以产生兴奋剂哦!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2021-4-20 18:38
  • 签到天数: 341 天

    连续签到: 1 天

    [LV.8]以坛为家I

    8

    主题

    1193

    帖子

    2

    金牌会员

    Rank: 6Rank: 6

    积分
    2370
    最后登录
    2022-4-29
    发表于 2016-11-24 21:07:32 | 显示全部楼层
    整理辛苦了
    梵蒂冈
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-8-21 11:23 , Processed in 0.086907 second(s), 24 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表