Cortex m0+笔记
/*******************************************************************************
/*******************************************************************************
*
* 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+笔记相关推荐
- hardfault常见原因_XMC实验分享之四十八: Cortex M0的Hard Fault发生原因
凡是在Cortex M系列内核上写过程序的程序员, 没有不知道Hard Fault的. 大多数程序出现问题的表现就是进入Hard Fault. 但是进入Hard Fault的原因是甚么, 为了查明这个 ...
- 基于Cortex M0+的STM32L0系列简介
L0系列是意法半导体于2014年新推出的超低功耗的MCU,基于ARM Cortex M0+内核.目前有STM32L0x1,STM32L0x2,STM32L0x3三个子系列,默认主频为32M,RAM都是 ...
- 32 位 ARM® Cortex®-M0+内核 单片机
PY32F003 系列微控制器采用高性能的 32 位 ARM® Cortex®-M0+内核,宽电压工作范围的 MCU.嵌入高达 32Kbytes flash 和 4Kbytes SRAM 存储器,最高 ...
- 32位ARM®Cortex®-M0+内核单片机 XL32F003系列MCU
XL32F003系列微控制器采用高性能的32位ARM®Cortex®-M0+内核,宽电压工作范围的MCU.嵌入高达64 Kbytes flash和8 Kbytes SRAM存储器,最高工作频率32 M ...
- 新唐ARM®Cortex™-M0特点总结
ARM®CortexTM-M0特点: 主频50mhz主频,0.9DMIPS/MHz(相当于8位和16位产品的2-4倍) 小的处理内核,系统和存储器,可以降低器件成本 完善的电源管理(睡眠,深度睡眠和深 ...
- ARM Cortex M0权威指南_PDF电子书下载 带书签目录 高清完整版 http://pan.baidu.com/s/1jGKQSwY MariaDB入门很简单_PDF电子书下载 带
ARM Cortex M0权威指南_PDF电子书下载 带书签目录 高清完整版 http://pan.baidu.com/s/1jGKQSwY MariaDB入门很简单_PDF电子书下载 带 ...
- 英飞凌tle985x芯片简介--集成了Arm®Cortex®M0的H桥驱动芯片
TLE985X解决方案的简介 Infineon`s integrated motor driver optimizes the target applications by offering cost ...
- 基于安路FPGA的Cortex M0移植【FPGA】
基于安路FPGA的Cortex M0移植 这其实是今年上半年参加集创赛安路科技杯时候做的内容,当时忙着考研复习大概做了个框架参赛,没想到还混到一个分赛区二等奖加一次公费旅游,现在保研后闲着写点博客记录 ...
- Cortex‐M3和Cortex‐M0是否都能位带操作
最近在进行stm32l011f4的编程,想到stm32有位带操作,便想试一试,但是事与愿违,先贴下位带操作代码 Cortex‐M0的位带操作代码 //IO输出方向设置 #define SDA_IN() ...
- 基于ARM Cortex M0 核心的低功耗蓝牙BLE芯片
MS1793S 是一款基于ARM Cortex M0 核心的低功耗蓝牙芯片,射频采用2.4GHz ISM 频段的频率,2MHz 信道间隔,符合蓝牙规范.MS1793S使用高性能的ARM®Cortex® ...
最新文章
- 使用中文输入法时对键盘事件的处理
- 喜大普奔,网易猪肉要到你碗里来了!
- P8-07-16 使用 Jenkins 自动构建 Maven 项目
- tomcat配置自动服务器地址,修改eclipse部署tomcat时服务器部署地址
- 监听 oracle执行sql语句,oracle SQL语句的监控 - 数据库相关 - 7点测试网
- Django 从0开始创建一个项目
- Linux设备驱动开发入门之——hello驱动
- Anaconda中spyder5闪退如何解决
- python2 python3 print_python2和python3中print有什么区别
- RAW 图像格式转换工具 bayer2rgb
- 如何在微信朋友圈分享网页内容的时候能够有缩略图
- vivos9保密柜从哪里进
- Python入门03——函数相关
- Python的第三次作业——陈灵院
- golang 调度之wakep和M创建
- py使用polar绘制霍兰德职业测试雷达图
- 像素、移动端网页——CSS
- Dessert(dfs)
- 别让STAR原则的简历毁了你的前途!
- 【​观察】数字经济时代的联接革命 新华三用场景化谋求破局
热门文章
- vue Fullcalendar鼠标放上展示悬浮框 (tippyjs插件的简单使用)
- 网页添加 Live2D 看板娘
- PS教程:如何设置水彩效果?
- C++战斗游戏-----------圣光战神の起源之战 V8.13.0
- 修改输入框placeholder文字样式(颜色、字号等)
- APP登录界面UI设计欣赏
- linux服务器运维工程师怎么样,怎样才算合格的运维工程师?linux运维技术
- 计算机到期收益率公式,用到期收益率计算债券价格
- win10计算机加域步骤,win10加域
- linux 执行程序时,提示not found问题分析