概述
简介
特点
可配置选项
可测性设计
可调试性设计
命名规则
符号
术语
微体系结构
结构框图
流水线介绍
浮点处理单元
DSP扩展单元
可信防护技术
紧耦合IP架构
编程模型
工作模式及寄存器视图
通用寄存器
条件码/进位标志位
系统控制寄存器
处理器状态寄存器(PSR,CR<0,0>)
更新PSR
向量基址寄存器(VBR,CR<1,0>)
异常保留寄存器(CR<2,0>,CR<4,0>)
产品序号寄存器(CPUIDR,CR<13,0>)
隐式操作寄存器(CHR,CR<31,0>)
其它控制寄存器
普通用户模式通用寄存器14(R14(User SP),CR<14,1>)
数据大小端
数据未对齐访问
系统地址映射
内存访问顺序
异常处理
异常处理概述
异常类型
重启异常(向量偏移0X0)
未对齐访问异常(向量偏移0X4)
访问错误异常(向量偏移0X8)
除以零异常(向量偏移0X0C)
非法指令异常(向量偏移0X10)
特权违反异常(向量偏移0X14)
跟踪异常(向量偏移0X18)
断点异常(向量偏移0X1C)
不可恢复错误异常(向量偏移0X20)
IDLY异常(异常偏移0X24)
陷阱指令异常(向量偏移0X40-0X4C)
浮点异常(向量偏移0X78)
中断异常
异常优先级
异常返回
指令集
概述
32位指令
32位指令功能分类
数据运算指令
分支跳转指令
内存存取指令
特权指令
特殊功能指令
DSP扩展指令
16位指令
16位指令功能分类
数据运算指令
分支跳转指令
内存存取指令
多寄存器存取指令
指令集列表
指令执行延迟
内存保护
内存保护单元简介
相关系统控制寄存器
高速缓存配置寄存器(CCR,CR<18,0>)
可高缓和访问权限配置寄存器(CAPR,CR<19,0>)
保护区控制寄存器(PACR,CR<20,0>)
保护区选择寄存器(PRSR,CR<21,0>)
内存访问处理
片上高速缓存
高速缓存简介
相关系统控制寄存器
高速缓存使能寄存器(CER)
高速缓存无效寄存器(CIR)
可高缓区配置寄存器0~3(CRCR)
高速缓存性能分析控制寄存器(CPFCR)
高速缓存访问次数寄存器(CPFATR)
高速缓存缺失次数寄存器(CPFMTR)
总线矩阵与总线接口
简介
系统总线接口
特点
协议内容
支持传输类型
支持响应类型
不同总线响应下的行为
AHB协议的接口信号
AHB-Lite协议的接口信号
指令总线接口
特点
协议内容
支持传输类型
支持响应类型
不同总线响应下的行为
指令总线接口信号
数据总线接口
特点
协议内容
支持传输类型
支持响应类型
不同总线响应下的行为
数据总线接口信号
指令与数据的访问顺序
调试接口
概述
外部接口
工作模式与转换
正常工作模式
低功耗模式
调试模式
调试模式
进入调试模式
退出调试模式
初始化参考代码
MPU设置示例
高速缓存设置示例
中断使能初始化
通用寄存器初始化示例
堆栈指针初始化示例
异常和中断服务程序入口地址设置示例
附录A 指令术语表
ABS——绝对值指令
ADDC——无符号带进位加法指令
ADDI——无符号立即数加法指令
ADDI(SP)——无符号(堆栈指针)立即数加法指令
ADDU——无符号加法指令
AND——按位与指令
ANDI——立即数按位与指令
ANDN——按位非与指令
ANDNI——立即数按位非与指令
ASR——算术右移指令
ASRC——立即数算术右移至C位指令
ASRI——立即数算术右移指令
BCLRI——立即数位清零指令
BEZ——寄存器等于零分支指令
BF——C为0分支指令
BGENI——立即数位产生指令#
BGENR——寄存器位产生指令
BHSZ——寄存器大于等于零分支指令
BHZ——寄存器大于零分支指令
BKPT——断点指令
BLSZ——寄存器小于等于零分支指令
BLZ——寄存器小于零分支指令
BMASKI——立即数位屏蔽产生指令
BNEZ——寄存器不等于零分支指令
BR——无条件跳转指令
BREV——位倒序指令
BSETI——立即数位置位指令
BSR——跳转到子程序指令
BT——C为1分支指令
BTSTI——立即数位测试指令
CLRF——C为0清零指令
CLRT——C为1清零指令
CMPHS——无符号大于等于比较指令
CMPHSI——立即数无符号大于等于比较指令
CMPLT——有符号小于比较指令
CMPLTI——立即数有符号小于比较指令
CMPNE——不等比较指令
CMPNEI——立即数不等比较指令
DECF——C为0立即数减法指令
DECGT——减法大于零置C位指令
DECLT——减法小于零置C位指令
DECNE——减法不等于零置C位指令
DECT——C为1立即数减法指令
DIVS——有符号除法指令
DIVU——无符号除法指令
DOZE——进入低功耗睡眠模式指令
FF0——快速找0指令
FF1——快速找1指令
GRS——符号产生指令
IDLY——中断识别禁止指令
INCF——C为0立即数加法指令
INCT——C为1立即数加法指令
INS——位插入指令
IPOP——中断出栈指令
IPUSH——中断压栈指令
IXD——索引双字指令
IXH——索引半字指令
IXW——索引字指令
JMP——寄存器跳转指令
JMPI——间接跳转指令
JSR——寄存器跳转到子程序指令
JSRI——间接跳转到子程序指令
LD.B——无符号扩展字节加载指令
LD.BS——有符号扩展字节加载指令
LD.D——双字加载指令
LD.H——无符号扩展半字加载指令
LD.HS——有符号扩展半字加载指令
LD.W——字加载指令
LDM——连续多字加载指令
LDQ——连续四字加载指令#
LDR.B——寄存器移位寻址无符号扩展字节加载指令
LDR.BS——寄存器移位寻址有符号扩展字节加载指令
LDR.H——寄存器移位寻址无符号扩展半字加载指令
LDR.HS——寄存器移位寻址有符号扩展半字加载指令
LDR.W——寄存器移位寻址字加载指令
LRS.B——字节符号加载指令
LRS.H——半字符号加载指令
LRS.W——字符号加载指令
LRW——存储器读入指令
LSL——逻辑左移指令
LSLC——立即数逻辑左移至C位指令
LSLI——立即数逻辑左移指令
LSR——逻辑右移指令
LSRC——立即数逻辑右移至C位指令
LSRI——立即数逻辑右移指令
MFCR——控制寄存器读传送指令
MOV——数据传送指令#
MOVF——C为0数据传送指令#
MOVI——立即数数据传送指令
MOVIH——立即数高位数据传送指令
MOVT——C为1数据传送指令#
MTCR——控制寄存器写传送指令
MULA.32.l——32位有符号乘累加取低32位指令
MULALL.S16.S——带饱和操作的16位有符号低半字乘累加指令
MULA.(U/S)32——32位(无/有)符号乘累加指令
MULT——乘法指令
MUL.(U/S)32——32位 (无/有)符号乘法指令
MVC——C位传送指令
MVCV——C位取反传送指令
NIE——中断嵌套使能指令
NIR——中断嵌套返回指令
NOR——按位或非指令
NOT——按位非指令#
OR——按位或指令
ORI——立即数按位或指令
POP——出栈指令
PSRCLR——PSR位清零指令
PSRSET——PSR位置位指令
PUSH——压栈指令
REVB——字节倒序指令
REVH——半字字节倒序指令
ROTL——循环左移指令
ROTLI——立即数循环左移指令
RSUB——反向减法指令#
RTE——异常和普通中断返回指令
RTS——子程序返回指令#
SCE——条件执行设置指令
SEXT——位提取并有符号扩展指令
SEXTB——字节提取并有符号扩展指令#
SEXTH——半字提取并有符号扩展指令#
SRS.B——字节符号存储指令
SRS.H——半字符号存储指令
SRS.W——字符号存储指令
ST.B——字节存储指令
ST.D——双字存储指令
ST.H——半字存储指令
ST.W——字存储指令
STM——连续多字存储指令
STOP——进入低功耗暂停模式指令
STQ——连续四字存储指令#
STR.B——寄存器移位寻址字节存储指令
STR.H——寄存器移位寻址半字存储指令
STR.W——寄存器移位寻址字存储指令
SUBC——无符号带借位减法指令
SUBI——无符号立即数减法指令
SUBI(SP)——无符号(堆栈指针)立即数减法指令
SUBU——无符号减法指令
SYNC——CPU同步指令
TRAP——操作系统陷阱指令
TST——零测试指令
TSTNBZ——无字节等于零寄存器测试指令
WAIT——进入低功耗等待模式指令
XOR——按位异或指令
XORI——立即数按位异或指令
XSR——扩展右移指令
XTRB0——提取字节0并无符号扩展指令
XTRB1——提取字节1并无符号扩展指令
XTRB2——提取字节2并无符号扩展指令
XTRB3——提取字节3并无符号扩展指令
ZEXT——位提取并无符号扩展指令
ZEXTB——字节提取并无符号扩展指令#
ZEXTH——半字提取并无符号扩展指令#
附录B DSP指令子集术语表
PADD.8——8位并行加法指令
PADD.16——16位并行加法指令
PADD.(U/S)8.S——带饱和操作的8位并行(无/有)符号加法指令
PADD.(U/S)16.S——带饱和操作的16位并行(无/有)符号加法指令
ADD.(U/S)32.S——带饱和操作的32位(无/有)符号加法指令
PSUB.8——8位并行减法指令
PSUB.16——16位并行减法指令
PSUB.(U/S)8.S——带饱和操作的8位并行(无/有)符号减法指令
PSUB.(U/S)16.S——带饱和操作的16位并行(无/有)符号减法指令
SUB.(U/S)32.S——带饱和操作的32位(无/有)符号减法指令
PADDH.(U/S)8——8位并行(无/有)符号加法求平均值指令
PADDH.(U/S)16——16位并行(无/有)符号加法求平均值指令
ADDH.(U/S)32——32位(无/有)符号加法求平均值指令
PSUBH.(U/S)8——8位并行(无/有)符号减法求平均值指令
PSUBH.(U/S)16——16位并行(无/有)符号减法求平均值指令
SUBH.(U/S)32——32位(无/有)符号减法求平均值指令
PASX.16——16位并行交叉加减指令
PSAX.16——16位并行交叉减加指令
PASX.(U/S)16.S——带饱和操作的16位并行(无/有)符号交叉加减指令
PSAX.(U/S)16.S——带饱和操作的16位并行(无/有)符号交叉减加指令
PASXH.(U/S)16——16位并行(无/有)符号交叉加减求平均值指令
PSAXH.(U/S)16——16位并行(无/有)符号交叉减加求平均值指令
ADD.64——64位加法指令
ADD.(U/S)64.S——带饱和操作的64位(无/有)符号加法指令
SUB.64——64位减法指令
SUB.(U/S)64.S——带饱和操作的64位(无/有)符号减法指令
ASRI.S32.R——带舍入操作的立即数算术右移指令
ASR.S32.R——带舍入操作的算术右移指令
LSRI.U32.R——带舍入操作的立即数逻辑右移指令
LSR.U32.R——带舍入操作的逻辑右移指令
LSLI.(U/S)32.S——带饱和操作的立即数(无/有)符号逻辑左移指令
LSL.(U/S)32.S——带饱和操作的(无/有)符号逻辑左移指令
PASRI.S16——16位并行立即数算术右移指令
PASR.S16——16位并行算术右移指令
PASRI.S16.R——带舍入操作的16位并行立即数算术右移指令
PASR.S16.R——带舍入操作的16位并行算术右移指令
PLSRI.U16——16位并行立即数逻辑右移指令
PLSR.U16——16位并行逻辑右移指令
PLSRI.U16.R——带舍入操作的16位并行立即数逻辑右移指令
PLSR.U16.R——带舍入操作的16位并行逻辑右移指令
PLSLI.16——16位并行立即数逻辑左移指令
PLSL.16——16位并行逻辑左移指令
PLSLI.(U/S)16.S——带饱和操作的16位并行立即数(无/有)符号逻辑左移指令
PLSL.(U/S)16.S——带饱和操作的16位并行(无/有)符号逻辑左移指令
SEL——位选择指令
PCMPNE.8——8位并行比较不等指令
PCMPNE.16——16位并行比较不等指令
PCMPHS.(U/S)8——8位并行(无/有)符号大于等于比较指令
PCMPHS.(U/S)16——16位并行(无/有)符号大于等于比较指令
PCMPLT.(U/S)8——8位并行(无/有)符号小于比较选择指令
PCMPLT.(U/S)16——16位并行(无/有)符号小于比较指令
PMAX.(U/S)8——8位并行(无/有)符号取大值指令
PMAX.(U/S)16——16位并行(无/有)符号取大值指令
MAX.(U/S)32——32位(无/有)符号取大值指令
PMIN.(U/S)8——8位并行(无/有)符号取小值指令
PMIN.(U/S)16——16位并行(无/有)符号取小值指令
MIN.(U/S)32——32位(无/有)符号取小值指令
DEXTI——立即数字截取指令
DEXT——字截取指令
PKG——立即数移位打包指令
PKGLL——低半字打包指令
PKGHH——高半字打包指令
PEXT.U8.E——8位并行无符号扩展指令
PEXT.S8.E——8位并行有符号扩展指令
PEXTX.U8.E——8位并行无符号交叉扩展指令
PEXTX.S8.E——8位并行有符号交叉扩展指令
NARL——低位截取拼装指令
NARH——高位截取拼接指令
NARLX——低位交叉截取拼接指令
NARHX——高位交叉截取拼接指令
CLIPI.(U/S)32——立即数(无/有)符号裁剪饱和指令
CLIP.(U/S)32——(无/有)符号裁剪饱和指令
PCLIPI.(U/S)16——16位并行立即数(无/有)符号裁剪饱和指令
PCLIP.(U/S)16——16位并行(无/有)符号裁剪饱和指令
PABS.S8.S——带饱和操作的8位并行绝对值指令
PABS.S16.S——带饱和操作的16位并行绝对值指令
ABS.S32.S——带饱和操作的32位绝对值指令
PNEG.S8.S——带饱和操作的8位并行取反指令
PNEG.S16.S——带饱和操作的16位并行取反指令
NEG.S32.S——带饱和操作的取反指令
DUP.8——8位操作数拷贝指令
DUP.16——16位操作数拷贝指令
MUL.(U/S)32——32位(无/有)符号乘法指令
MULA.(U/S)32——32位(无/有)符号乘累加指令
MULS.(U/S)32——32位(无/有)符号乘累减指令
MULA.(U/S)32.S——带饱和操作的32位(无/有)符号乘累加指令
MULS.(U/S)32.S——带饱和操作的32位(无/有)符号乘累减指令
MUL.S32.H——32位有符号乘法取高32位指令
MUL.S32.RH——带舍入操作的32位有符号乘法取高32位指令
RMUL.S32.H——32位有符号小数乘法取高32位指令
RMUL.S32.RH——带舍入操作的32位有符号小数乘法取高32位指令
MULA.S32.HS——带饱和操作的32位有符号乘累加取高32位指令
MULS.S32.HS——带饱和操作的32位有符号乘累减取高32位指令
MULA.S32.RHS——带舍入和饱和操作的32位有符号乘累加取高32位指令
MULS.S32.RHS——带舍入和饱和操作的32位有符号乘累减取高32位指令
MULA.32.L——32位有符号乘累加取低32位指令
MULXL.S32——32位有符号低半字不对齐乘指令
MULXL.S32.R——带舍入操作的32位有符号低半字不对齐乘指令
MULXH.S32——32位有符号高半字不对齐乘指令
MULXH.S32.R——带舍入操作的32位有符号高半字不对齐乘指令
RMULXL.S32——32位有符号低半字不对齐小数乘指令
RMULXL.S32.R——带舍入操作的32位有符号低半字不对齐小数乘指令
RMULXH.S32——32位有符号高半字不对齐小数乘指令
RMULXH.S32.R——带舍入操作的32位有符号高半字不对齐小数乘指令
MULAXL.S32.S——带饱和操作的32位有符号低半字不对齐乘累加指令
MULAXL.S32.RS——带舍入和饱和操作的32位有符号低半字不对齐乘累加指令
MULAXH.S32.S——带饱和操作的32位有符号高半字不对齐乘累加指令
MULAXH.S32.RS——带舍入和饱和操作的32位有符号高半字不对齐乘累加指令
MULLL.S16——16位有符号低半字乘法指令
MULHH.S16——16位有符号高半字乘法指令
MULHL.S16——16位有符号高低半字乘法指令
RMULLL.S16——16位有符号低半字小数乘法指令
RMULHH.S16——16位有符号高半字小数乘法指令
RMULHL.S16——16位有符号高低半字小数乘法指令
MULALL.S16.S——带饱和操作的16位有符号低半字乘累加指令
MULAHH.S16.S——带饱和操作的16位有符号高半字乘累加指令
MULAHL.S16.S——带饱和操作的16位有符号高低半字乘累加指令
MULALL.S16.E——带扩展操作的16位有符号低半字乘累加指令
MULAHH.S16.E——带扩展操作的16位有符号高半字乘累加指令
MULAHL.S16.E——带扩展操作的16位有符号高低半字乘累加指令
PMUL.(U/S)16——16位并行(无/有)符号乘法指令
PMULX.(U/S)16——16位并行(无/有)符号交叉乘法指令
PRMUL.S16——16位并行有符号小数乘法指令
PRMULX.S16——16位并行有符号交叉小数乘法指令
PRMUL.S16.H——16位并行有符号小数乘法取高16位指令
PRMUL.S16.RH——带舍入操作的16位并行有符号小数乘法取高16位指令
PRMULX.S16.H——16位并行有符号交叉小数乘法取高16位指令
PRMULX.S16.RH——带舍入操作的16位并行有符号交叉小数乘法取高16位指令
MULCA.S16.S——带饱和操作的16位有符号乘链加指令
MULCAX.S16.S——带饱和操作的16位有符号交叉乘链加指令
MULCS.S16——16位有符号乘链减指令
MULCSR.S16——16位有符号反向乘链减指令
MULCSX.S16——16位有符号交叉乘链减指令
MULACA.S16.S——带饱和操作的16位有符号乘链加累加指令
MULACAX.S16.S——带饱和操作的16位有符号交叉乘链加累加指令
MULACS.S16.S——带饱和操作的16位有符号乘链减累加指令
MULACSR.S16.S——带饱和操作的16位有符号反向乘链减累加指令
MULACSX.S16.S——带饱和操作的16位有符号交叉乘链减累加指令
MULSCA.S16.S——带饱和操作的16位有符号乘链加累减指令
MULSCAX.S16.S——带饱和操作的16位有符号交叉乘链加累减指令
MULACA.S16.E——带扩展操作的16位有符号乘链加累加指令
MULACAX.S16.E——带扩展操作的16位有符号交叉乘链加累加指令
MULACS.S16.E——带扩展操作的16位有符号乘链减累加指令
MULACSR.S16.E——带扩展操作的16位有符号反向乘链减累加指令
MULACSRX.S16.E——带扩展操作的16位有符号交叉乘链减累加指令
MULSCA.S16.E——带扩展操作的16位有符号乘链加累减指令
MULSCAX.S16.E——带扩展操作的16位有符号交叉乘链加累减指令
PSABSA.U8——8位并行无符号减法绝对值链加指令
PSABSAA.U8——8位并行有无号减法绝对值链加累加指令
DIVSL——有符号长除法指令
DIVUL——无符号长除法指令
MULACA.S8——8位并行有符号乘链加累加指令
BLOOP——循环体加速指令
LDBI.W——地址自增的字加载指令
LDBI.H——地址自增的无符号半字加载指令
LDBI.HS——地址自增的有符号半字加载指令
LDBI.B——地址自增的无符号字节加载指令
LDBI.BS——地址自增的有符号字节加载指令
PLDBI.D——地址自增的双字加载指令
STBI.W——地址自增的字存储指令
STBI.H——地址自增的半字存储指令
STBI.B——地址自增的字节存储指令
LDBIR.W——寄存器地址自增的字加载指令
LDBIR.H——寄存器地址自增的无符号半字加载指令
LDBIR.HS——寄存器地址自增的有符号半字加载指令
LDBIR.B——寄存器地址自增的无符号字节加载指令
LDBIR.BS——寄存器地址自增的有符号字节加载指令
PLDBIR.D——寄存器地址自增的双字加载指令
STBIR.W——寄存器地址自增的字存储指令
STBIR.H——寄存器地址自增的半字存储指令
STBIR.B——寄存器地址自增的字节存储指令