/*******************************************************************************
/*******************************************************************************
*    
*        Cortex-M0+专用外设总线(PPB)地址分布:
*            0xE000E010 - 0xE000E01F        SysTick        (可选的)
*            0xE000E100 - 0xE000E4EF        NVIC
*            0xE000ED00 - 0xE000ED3F        SCB
*            0xE000ED90 - 0xE000EDB8        MPU            (可选的)
*
********************************************************************************/

SysTick:系统滴答模块
        地址            寄存器        类型    
        0xE000E010        CTRL        RW            //模块控制和状态寄存器
        0xE000E014        LOAD        RW            //模块重载值寄存器
        0xE000E018        VAL            RW            //模块当前值寄存器
        0xE000E01C        CALIB        RO            //模块校正值寄存器(通常不使用)
        
    -------------------------------------------------------------------
    CTRL:包含定时标志位,时钟源选择位,中断开关位,定时器开关位
    LOAD:写入一个24位长度的重载值
    VAL:存储着一个24位长度的当前值,任何写入操作都会清0该域,同时清0定时标志位
    -------------------------------------------------------------------
    SysTick使用方法:
                    1.初始化模块
                    2.写入重载值
                    3.清除当前值
                    4.使能模块

/********************************************************************************/

NVIC:可嵌套中断向量控制器模块
        地址                        寄存器        类型
        0xE000E100                    ISER        RW        //外围模块中断使能寄存器    32位对应32个外部中断源IRQ
        0xE000E180                    ICER        RW        //外围模块中断禁止寄存器    32位对应32个外部中断源IRQ
        0xE000E200                    ISPR        RW        //中断挂起(进入等待)寄存器    写1挂起,写0无反应
        0xE000E280                    ICPR        RW        //中断取消挂起寄存器            写1取消挂起,写0无反应
        0xE000E400 - 0xE000E4EF        IPR 0~7        RW        //中断优先级寄存器
        
        ----------------------------------------------------------------
        IPRn(0~7):
            这7个寄存器结构相同:    31 30 ... 23 22 ... 15 14 ... 7 6 ...
                                    每个寄存器分为4个位域,每个位域(8位)只有高2位有效
            这7个寄存器根据IRQ(0~31)将外部中断优先级分成8级,每一级4个,这4个的优先级可以自行调整
        ----------------------------------------------------------------
        NVIC使用方法:
                    CMSIS库中已经自带了相关函数,通过调用即可

/********************************************************************************/

SCB:系统控制模块        
        地址            寄存器        类型    
        0xE000ED00        CPUID        RO            //CUP版本号、架构号相关
        0xE000ED04        ICSR        RW            //内部中断控制和状态寄存器
        0xE000ED08        VTOR        RW            //向量表偏移寄存器
        0xE000ED0C        AIRCR        RW            //应用中断和复位控制寄存器
        0xE000ED10        SCR            RW            //系统控制寄存器
        0xE000ED14        CCR            RO            //配置和控制寄存器
        0xE000ED1C        SHPR2        RW            //SVCall的优先级控制寄存器
        0xE000ED20        SHPR3        RW            //SysTick、PendSV优先级控制寄存器
        
        ------------------------------------------------------------------
        ICSR:
            [31]:    NMI设置挂起位,写1挂起    
            [28]:    PendSV设置挂起位
            [27]:    PendSV清除挂起位
            [26]:    SysTick设置挂起位
            [25]:    SysTick清除挂起位
            [17:12]:只读,存储中断向量号(非IRQ)
        VTOR:(Cortex M0+手册似乎有误)
            向量表基址默认位于0x00000000,此处可以设置偏移量,从而对向量表在存储空间的地址进行重定向
            1 张向量表尺寸为:64×4=256字节,所以偏移地址必须按256字节对齐
            即[ 31:8 ]位有效,因此向量表重定位范围可以取0x00000000、0x00000100、0x00000200 .... 0xFFFFFF00,
        AIRCR:
            [31:16]:写该寄存器,第一步是写0x05FA到该域,否则任何写操作无效
            [15]:    控制数据存储格式为大/小端
            [2]:    写1产生一个系统级复位
            [1]:    用于DEBUG
        SCR:
            [4]:    用于唤醒处理器
            [2]:    低功耗模式下,用于控制处理器处于浅睡眠还是深度睡眠
            [1]:    还是跟睡眠相关
        CCR:
            [9]:    栈对齐相关,通常读取为1,表示8字节的栈对齐方式
            [3]:    对齐相关,通常读取位1,表示一旦有未对齐出现,就会产生一个HardFault

/********************************************************************************/
    MPU:内存保护单元

/*******************************************************************************        
/*******************************************************************************        
/*******************************************************************************
*    
*        Cortex-M0+内核寄存器:
*            通用寄存器:    R1,R2,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12
*            栈指针:        SP(R13)        ->    PSP    / MSP
*            链接寄存器:    LR(R14)
*            程序计数器:    PC(R15)
*            程序状态寄存器:PSR
*            中断屏蔽寄存器:PRIMASK
*            控制寄存器:    CONTROL
********************************************************************************/

SP:        在thread mode 下,CONTROL中的[1]位决定了SP是MSP还是PSP
            在handle mode 下,SP只能是MSP
            MSP的值来自地址0x00000000上
    LR:        当进行函数调用、执行异常等时,该寄存器保存了返回地址
    PC:        保存的是当前程序运行地址,reset时,自动载入0x00000004地址上的值
    PSR:    31             30             29             28         ...        24         ...     5 4 3 2 1 0
            N              Z              C              V               T                  中断异常号    
         负标志      零标志  进位/借位标志   溢出标志        Thumb标志            (0~47)    
            PSR其实是由3个寄存器(APSR、EPSR、IPSR)复合而成
    CONTROL:包含MSP/PSP选择位、thread mode下处理器特权选择位
    注意点:操作这些内核寄存器必须通过 MSR/MRS指令 + 各自寄存器名    来完成。

/*******************************************************************************        
/*******************************************************************************        
/*******************************************************************************
*    
*        ARM汇编部分
*
********************************************************************************/        
汇编中几个常用的段代号,基本跟编译器和处理器都没有关系:
    .text        //代码段,具有可执行的属性
    .data        //读写数据段,存放已初始化全局变量
    .const        //只读数据段(有些编译器不使用此段,将只读数据并入.data段)
    .bss        //未初始化的全局变量数据段,

//-----------------------------------------------------------------------------

Cortex m0+笔记相关推荐

  1. hardfault常见原因_XMC实验分享之四十八: Cortex M0的Hard Fault发生原因

    凡是在Cortex M系列内核上写过程序的程序员, 没有不知道Hard Fault的. 大多数程序出现问题的表现就是进入Hard Fault. 但是进入Hard Fault的原因是甚么, 为了查明这个 ...

  2. 基于Cortex M0+的STM32L0系列简介

    L0系列是意法半导体于2014年新推出的超低功耗的MCU,基于ARM Cortex M0+内核.目前有STM32L0x1,STM32L0x2,STM32L0x3三个子系列,默认主频为32M,RAM都是 ...

  3. 32 位 ARM® Cortex®-M0+内核 单片机

    PY32F003 系列微控制器采用高性能的 32 位 ARM® Cortex®-M0+内核,宽电压工作范围的 MCU.嵌入高达 32Kbytes flash 和 4Kbytes SRAM 存储器,最高 ...

  4. 32位ARM®Cortex®-M0+内核单片机 XL32F003系列MCU

    XL32F003系列微控制器采用高性能的32位ARM®Cortex®-M0+内核,宽电压工作范围的MCU.嵌入高达64 Kbytes flash和8 Kbytes SRAM存储器,最高工作频率32 M ...

  5. 新唐ARM®Cortex™-M0特点总结

    ARM®CortexTM-M0特点: 主频50mhz主频,0.9DMIPS/MHz(相当于8位和16位产品的2-4倍) 小的处理内核,系统和存储器,可以降低器件成本 完善的电源管理(睡眠,深度睡眠和深 ...

  6. ARM Cortex M0权威指南_PDF电子书下载 带书签目录 高清完整版 http://pan.baidu.com/s/1jGKQSwY MariaDB入门很简单_PDF电子书下载 带

    ARM  Cortex  M0权威指南_PDF电子书下载 带书签目录 高清完整版   http://pan.baidu.com/s/1jGKQSwY   MariaDB入门很简单_PDF电子书下载 带 ...

  7. 英飞凌tle985x芯片简介--集成了Arm®Cortex®M0的H桥驱动芯片

    TLE985X解决方案的简介 Infineon`s integrated motor driver optimizes the target applications by offering cost ...

  8. 基于安路FPGA的Cortex M0移植【FPGA】

    基于安路FPGA的Cortex M0移植 这其实是今年上半年参加集创赛安路科技杯时候做的内容,当时忙着考研复习大概做了个框架参赛,没想到还混到一个分赛区二等奖加一次公费旅游,现在保研后闲着写点博客记录 ...

  9. Cortex‐M3和Cortex‐M0是否都能位带操作

    最近在进行stm32l011f4的编程,想到stm32有位带操作,便想试一试,但是事与愿违,先贴下位带操作代码 Cortex‐M0的位带操作代码 //IO输出方向设置 #define SDA_IN() ...

  10. 基于ARM Cortex M0 核心的低功耗蓝牙BLE芯片

    MS1793S 是一款基于ARM Cortex M0 核心的低功耗蓝牙芯片,射频采用2.4GHz ISM 频段的频率,2MHz 信道间隔,符合蓝牙规范.MS1793S使用高性能的ARM®Cortex® ...

最新文章

  1. 使用中文输入法时对键盘事件的处理
  2. 喜大普奔,网易猪肉要到你碗里来了!
  3. P8-07-16 使用 Jenkins 自动构建 Maven 项目
  4. tomcat配置自动服务器地址,修改eclipse部署tomcat时服务器部署地址
  5. 监听 oracle执行sql语句,oracle SQL语句的监控 - 数据库相关 - 7点测试网
  6. Django 从0开始创建一个项目
  7. Linux设备驱动开发入门之——hello驱动
  8. Anaconda中spyder5闪退如何解决
  9. python2 python3 print_python2和python3中print有什么区别
  10. RAW 图像格式转换工具 bayer2rgb
  11. 如何在微信朋友圈分享网页内容的时候能够有缩略图
  12. vivos9保密柜从哪里进
  13. Python入门03——函数相关
  14. Python的第三次作业——陈灵院
  15. golang 调度之wakep和M创建
  16. py使用polar绘制霍兰德职业测试雷达图
  17. 像素、移动端网页——CSS
  18. Dessert(dfs)
  19. 别让STAR原则的简历毁了你的前途!
  20. 【​观察】数字经济时代的联接革命 新华三用场景化谋求破局

热门文章

  1. vue Fullcalendar鼠标放上展示悬浮框 (tippyjs插件的简单使用)
  2. 网页添加 Live2D 看板娘
  3. PS教程:如何设置水彩效果?
  4. C++战斗游戏-----------圣光战神の起源之战 V8.13.0
  5. 修改输入框placeholder文字样式(颜色、字号等)
  6. APP登录界面UI设计欣赏
  7. linux服务器运维工程师怎么样,怎样才算合格的运维工程师?linux运维技术
  8. 计算机到期收益率公式,用到期收益率计算债券价格
  9. win10计算机加域步骤,win10加域
  10. linux 执行程序时,提示not found问题分析