DSP芯片

出厂烧写在DSP芯片内,0F800H。A,B累加器分成三部分 AR被分成8个辅助寄存器这些都被编程了地址,但一般还是用名字来编写程序,ST0 ST1等等。io空间dsp外扩引脚,可以操作外扩电路,可以操作io电平来操作,指令有 PORTR PORTW端口读和端口写。DSP中断系统有软中断和硬中断,软中断一般由程序指令来实现,硬中断一般是芯片内外的硬中断。也可分成可屏蔽中断和不可屏蔽中断,可屏蔽中断一般是硬件的中断(外部中断,串口中断,定时器 DMA中断),不可屏蔽中断一般是两个硬中断(RS(重启) NMI*)还有所有软中断。DSP给每个中断都给了一个偏移地址,把所有中断地址都放在一起,称为中断向量表,不能跨页必须要在一块。低7位代表地址,高9位代表中断向量表的页地址,放在了中断向量指针(IPTR决定)。所有复位后程序从FF80H处开始执行,因为重启的中断地址就是FF80H,一般里面是跳转指令。当使用电脑模式时候,FF80H后变成了RAM空间不能修改,需要搬移IPTR,用”STM #0001H,PMST“代表被搬到080H起始地址。0001H表示成2进制0 0000 0001 0000 0000 +20(14H)也是0001 0100 00=00D0H=208(D)。带.的指令是伪指令 例如.ref引用函数名 .def 引用标号。rst : B_C_int00;(跳转到main 函数).space 24*4*46 跳过空间。乘累加的乘法器是16位 加法器40位。MC有效 用户程序来自片外的。累加器B不能累加器寻址


只有少数的指令不需要读和写阶段。指令中直接包含操作数等如LD A,B    ADD #3,B.大多数都需要到存储器读操作或者将结果保存到存储器。DSP指令一般是前面的来操作,后面的是目标。数据的寻址方式,立即数寻址(指令中直接给出操作数 分成短立即数 长立即数 包含短立即数 包含长立即数 指令中立即数前面要加#号 例如LD #80h,A 把80h这个数放在A里面去 若不加#就是把80h代表的寄存器地址里面的东西了),绝对寻址(指令中直接给出操作数16位地址,数据存储器当中只有MVDK MVDM MVKD MVMD这几条指令,地址可以用标号或者符号常数来表示 程序存储器寻址适用于 MVPD MVDP指令 不占用cpu alu io端口寻址适用于PORTR PORTW两条指令,*(IK)寻址如LD *(1068H),A 也是绝对寻址 )。累加器寻址(用累加器里面的数当作寻址,只有两条指令 READA把累加器A的低16位(或者低23位)当作地址从程序读一个数写到数据空间  WRITA相反,因为有些DSP程序空间大于64K,所以寄存器16位就用不了了)。寻址一般和DP联动 DP代表的数是高9位 +那个数字 就代表了地址。直接寻址(指令中直接包含操作数在数据存储器当中的地址 他只拿后面的7位 其他的放在DP或者SP里面这是和绝对寻址不一样的,DP是高九位拼接低7位,SP是直接加)。STL A,@y(将累加器A的低16位存到y里面去,@代表直接寻址的方式).一般来说这样写不一定奏效,要加RSBX CPL 和LD #y,DP这样自动将y的高九位地址装入DP,再实行直接寻址。或者SSBX CPL和STM #1000h,Sp使用SP来存高位。不能写成STM #y,SP否则SP=y的地址了。(ik)寻址不需要设置DP。没有高九位,必须要认为LD #20h,DP来加载高9位。(ik)寻址代价就是指令长度增加一个值。LD 68h,B不是绝对寻址的原因是因为绝对寻址只有几个指令很特定。

猜你喜欢

转载自blog.csdn.net/weixin_63163242/article/details/132047732
dsp