dsp2407程序中用ioport的问题

dsp2407程序中用ioport的问题,第1张

2407将存储器空间定义成3个部分,分别是:程序空间、数据空间和I/O空间,这三部分的地址都是0000H~0FFFFH,主要是为扩展不同用处的外围设备用的,具体可以参看2407数据手册内存空间图。扩展在I/O空间的设备一般不会用大量连续寻址的方式 *** 作,而是利用某些特殊地址进行访问,比如FIFO、AD、DA这样的设备,因为I/O空间寻址程序中比较麻烦,不像数据空间或程序空间那样可以进行成块的连续地址寻址。

如果有些设备是连接在I/O空间(比如CPLD的某个寄存器),并通过这个空间的片选进行寻址的,就要用I/O寻址方式来进行,具体就是象你例子中的port0001这样寻址,寻址的地址为0001H,比如程序中写prot0001=0x0a那么执行时地址总线对应输出地址0001H,数据线出0aH,对应的片选和strb、写信号都有,这个你可以测量。

我简单说下吧如果你使用的是TIC2000系列dsp,下述可作为参考为了产生一个PWM信号,DSP的定时器定时周期应该和PWM的周期相等。另外需要对DSP的EVA/EVB模块中的比较单元的比较寄存器设定数值,这样该数值一直与定时器的计数器值相比较,按照一定的比较方式,PWM即产生跳变。通过此种方式,DSP的PWM管脚就会产生一个宽度与比较寄存器数值成比例的脉冲信号。在定时器重复定时的过程中就产生了PWM信号。 使用DSP比较单元产生PWM波形不需要硬件连接图,只需对DPS的相关寄存器进行配置就可以在输出端得到相应的PWM波形,其具体 *** 作过程如下: 1设置比较方式控制寄存器ACTRx 2如有必要,使能死区功能,配置死区控制寄存器DBTCONx 3对比较寄存器CMPRx赋值 4设置定时器寄存器T1CON(T3CON)并启动定时 5通过更新CMPRx的数值改变PWM占空比的大小 对于我所熟悉的2407 DSP 程序如下: PWMINIT LDP #0E1H SPLK #0AH,MCRCPWM7,9 SPLK #0140H,MCRAPWM1,3 LDP #0E8H SPLK #0,CMPR1 SPLK #0,CMPR2 SPLK #0H,ACTRASPLK #0H,DBTCONA SPLK #0A600H,COMCONA SPLK #2000,T1PR SPLK #0,T1CNT SPLK #0H,GPTCONASPLK #80H,EVAIMRA SPLK #0FFFFH,EVAIFRA SPLK #0FFFFH,EVAIFRB SPLK #0FFFFH,EVAIFRC LDP #0EAH SPLK #0H,ACTRBSPLK #0H,DBTCONB SPLK #0,CMPR4 SPLK #0,CMPR5 SPLK #2000,T3PR SPLK #0A600H,COMCONB SPLK #0,T3CNT SPLK #0FFFFH,EVBIFRA SPLK #0FFFFH,EVBIFRB SPLK #0FFFFH,EVBIFRC RET 该段程序使用2407两个事件管理器模块的4个PWM输出引脚pwm1 pwm3 pwm7 pwm9进行pwm输出,定时器周期为2000,只要你将写入CMPR的数值改变 就可以得到不同占空比的PWM波形,不妨试一试,前提是DSP可以正常工作~


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11139108.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存