原创 PIC24HJ单片机自学笔记-程序存储器、数据存储器和FLASH编程

2014-1-16 06:12 2592 12 12 分类: MCU/ 嵌入式 文集: PIC24HJ单片机自学笔记
程序存储器
下图所示PIC24H器件有4M*24位的程序存储单元,有三种方法来访问这些单元。
23位的PC
通过talble读写指令
映射一个32K的段
程序空间分为用户编程单元和用户配置单元
用户编程单元包括一个复位向量,中断向量表,和存储单元
用户配置空间包括非可变的配置位来设置器件的参数和器件ID.
如下框图为存储器的隐射图

控制寄存器
CORCON:只有一位有效,PSV,作为使能和去使能PSV段可见。
PSVPAG:一共8位地址,和W寄存器的15位最低有效位构成23位的程序地址单元。
TBLPAG:一共8位,和W寄存器的15位最低有效位构成23位的程序地址单元。
PC:
从上面的存储器映射可以看出,PC没有指向地址为奇数的空间。这个是为了兼容数据空间寻址,部分器件可以寻址4M,每一个指令字的宽度为24比特。
PC的最低位为PSV和table指令保留,在指令寻址的时候,此位不需要,直接设置为0.
下图闲置了一个指令读取的例子,注意PC<22:1>=2*PC<22:0>

用TABLE指令的程序存储器读写
TBLRDL和TBLWTL可以直接读写任何程序空间地址的最低有效位,
而不需要通过数据地址,这个在有些应用中很有用。
TBLRDH和TBWTH是唯一可以将高8位的程序字作为数据字的指令。
TABLE指令汇总:

TABLE指令可以在程序空间和数据空间中传递字节和字的类型,TABLE读指令是从程序空间中读到数据空间,写则是数据空间到程序空间。

这里有一个问题,数据空间的宽度是16位,而程序空间为24位,TABLE指令可以把程序空间当成两个16位的地址空间,这样,最大可寻址64K。
低位的读写则读写程序空间的低16位,而高8位则通过高位读写指令来完成,最高8位虽然可寻址,但是是不存在的,是一个需的地址。

如何产生一个TABLE地址?
我们知道,地址的宽度是24位,这样,8位TBLPAG作为选择程序空间还是配置空间,而另外的16位作为寻址的地址,这样的就是32K个16位的地址,一共64K空间。

程序空间的数据TABLE地址
有三种情况,如果是TBLRDL.W这样的形式,则后面跟的是16位地址,如果是TABLRDL.B则看Wn的最低位,如果是0,则是最低8位地址,如果是1,位高8位的地址。

程序空间的高8位读写:
程序空间的高8位通过TBLRDH和TBLWTH来读写,和读第八位是一样的,不同的是,这个16位的前八位是无效的,读的时候返回的是0.

程序空间的数据存储
大部分的应用时候,高8位是没有使用的,数据存储按照16位宽度存储,推荐没有使用的位用NOP指令来填充,或者使用一个非法码,来保护此8位被意外执行。高8位通常在矩阵的存储和修改等需要压缩数据存储的条件下使用。

数据的程序空间可视
高达32K的数据可以映射到程序空间,这种模式叫做PSV,这种模式下,无需特殊指令,即可将数据存储到程序空间。

PSV的配置
PSV可以通过CORCON来设置,使能后,一半的数据空间可以映射到程序空间,低16位时可用的,而高8位不能隐射,需要用非法指令或者NOP来填充,位了保存系统的稳定,高8位只能通过指令来进行读写。
W寄存器中包含的低15位地址为有效地址,最高位则表示数据空间的类型,如果最高位为1,则表示映射到PSV,如果最高位位0,则表示不映射,存储到数据存储器中。

数据存储器简介
PIC24H的数据宽度为16位,数据空间最大可以寻址64K,数据的读写是通过两个AGU来产生地址的。
64K的数据空间最大为0XFFFF,也就是最大的空间为64K,其中PIC24HJ系列的存储器结构如下:
20140116061119635.jpg
图中,2K空间为SFR,另外有8K的RAM空间,其中的8K空间包括了2K的DMA RAM,最大的地址也就是0X2800.
实际上X DATA RAM的空间为0X0800到0X2000,共6K。
W寄存器可以做为一个地址指针来进行读写。具体的DMA RAM可以参考DMA的资源。
从上面的图中可以看出,除了DMA RAM以外的数据存储区,都是Near数据存储区。
最高有一半的存储区可以通过PSV映射到程序空间,具体看PSV的介绍。

NEAR数据存储区
有8K的空间可以作为NEAR数据存储区,也就是说,PIC24HJ128GP506这颗芯片出了DMA RAM以外都可以当作13位直接寻址的NEAR区间。

AGU:
16位的地址都可以通过AGU来产生,如果超过这个范围,在复位的介绍可以看到,芯片将产生一个复位。AGU分为读写两个,都是在预取指的时候开始获得一个EA。

数据队列:
数据队列如下:
20140116061133908.jpg
从上图可以看出,每一个地址存放的是一个字节数据,两个地址存放一个16位的数据,这个16位的数据分为高字节和低字节两个字节。一个偶数地址存放一个字的类型的数据,32位的数据为Long wrod数据,按照低字先存的方式列队存储。

DMA RAM:
这个在DMA资源部分有详细介绍。

FLASH编程简介
在程序存储器中介绍过TABLE指令,而在FLASH编程里面,就是用到了四条TABLE指令来实现的,具体的TABLE指令的例子也可以参考手册。
控制寄存器:
NVMCON:这个是FLASH编程和擦除主要的控制寄存器。
NVMKEY:这个主要是防止意外的擦写FLASH操作,擦除之前,需要先写入0X55,然后写入0XAA,然后是两条NOP就可以擦除。
在这个过程中,必须先关中断,防止被中断打断。

NVMCON有如下的控制位:
WR,初始化一个编程和擦除操作
WREN:使能编程和擦除
WRERR:编程和擦除错误标志
ERASE:擦除使能
NVMOP:擦除操作选择,选择要擦除的部分。如果ERASE=0,则,作为编程操作 

RTSP:
RTSP通过TABLE指令修改FLASH内容,也可以进行擦除和编程,一次性擦除为64*8条指令,或者一次性写入64条指令。
具体如何操作来读写这个缓冲,参考手册内容。





















































PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
12
关闭 站长推荐上一条 /3 下一条