TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F28335的一些调试经验

V4 所有外设配置,针对开发板(除CAN口和EQEP)

V5 针对项目,配置了对应的外设(包含有EQEP)

V6 针对开发板,对EQEP进行了调试和配置

V7 添加控制程序

PWM初始状态:

(1)       上电为低电平

(2)       初始化GPIO之后变为低电平(InitGPio)

(3)       InitEPwmGpio之后为低电平(EPWM默认为不上拉(其他的为默认上拉),输入脚)

(4)       InitEPwm之后,高阻态(通过TZ实现的)

(6)如果PWM定时器中断的时间不够,可以改变ET的触发次数值来实现延长中断时间的目的,而不改变PWM的周期

TZ调试

(1)       开发板上由于复用了引脚,因此TZ3~TZ6都不可用,程序中使用了TZ1和TZ2 (要修改为TZ5和TZ6,只需用在InitEPwm中修改两处,以及将InitTzGpio中的注释部分去掉)

(2)       出现TZ将PWM置于高阻态,测量引脚实际是高电平

(3)       CBC(适用于电流限制)是出现TZ封锁,TZ消失后恢复(自动的);one shot(适用于短路电流和过流)是一旦出现,就一直保持是封锁状态(但也可以手动恢复:

//EALLOW;

//EPwm1Regs.TZCLR.bit.OST = 1;

//EPwm1Regs.TZCLR.bit.INT = 1;

// EDIS;

 

(4)       通过TZ来进行脉冲的封锁与使能

逻辑顺序是:关中断——封脉冲(softforce)——开脉冲(清除flag位)——开中断

使用232进行控制,232中断里完成清除flag位与开中断的任务。

 

(5)       将机侧和网侧都改为one shot trip sources,CBC在软件trip的时候不是很好用,无法封锁脉冲

 

SCI调试

(1)       使能FIFO,设置为接收一个数据便进入一次中断

(2)       串口调试助手应选择16进制发送,即在发送之前把发送内容变为16进制,这样DSP收到的数才正确

(3)       ScicRegs.SCIRXBUF.all里的数在读出之后便无效,使用观察窗口看不到接收到的数

(4)       如果是9600的波特率,5K的开关频率,限于通讯速率,如果发送使用查询模式,一次中断只发送一个数据。

 

CAN口调试

(1)       具有时间戳,可以考虑用中断方式进行接受,能够实现传输超时的检测

(2)       CAN口是总线,也可以理解为是半双工的,通过优先级进行仲裁

(3)       CAN只有在接受端接收到正确的数据,实现了握手,才能将TA置位

 

Ecap调试

(1)       上电高电平,

(2)       当通过禁止时钟来实现封锁APWM时 ,PWM一会儿高电平,一会儿低电平;因此可以考虑采用改变比较值来封锁脉冲。设置

实现封锁后一直输出高。

 

CpuTIMER调试

(1)       只使能timer0

(2)       预留了timer1和timer2的初始化与配置。如果程序过大,可以从此处精简

 

I2C调试

(1)       注意读写之间要加延时DELAY_US(10000)

(2)       64K与2K的EEPROM在数据格式上有差别:主要是64K的地址位更多

 

XINTF调试

(1)       原理图上存储芯片的CS信号为什么不和DSP的直接相连?难道是为了进一步的扩展?

(2)       On 28x devices, regions of memory where peripheral registers are common are protected from this order reversal by hardware. These regions of memory are said to be read-followed-by-write pipeline protected.XINTF Zone 0 is by default read-followed-by-write pipeline protected. Write and read accesses to Zone 0 are executed in the same order that they are written. For example, a write followed by a read is executed in the same order it was written

(3)      

eqed调试

(1)在高速时精度才能保证

比如对于1024线每转的码盘,如果计算周期T是100HZ,则绝对误差为 60×100/(1024×4)=1.5rmp

(2)如果.text文件很大将其放在一段放不下,需将其放到两个程序段中

最长的一个length=0x002000,也放不下时.可以这样处理:

PAGE 0 :

            PRAMH0     : origin = 0x3F8002, length = 0x0014FE
            L0RAM      : origin = 0x008000, length = 0x001000

 

SECTIONS

              .text:{*(.text)} >>PRAMH0|L0RAM

这样就可以将.text文件放在两个定义段中。

(3)浮点运算时,注意(1.0/(2048*4))

详细资料请下载附件

Maka:

非常感谢分享

V4 所有外设配置,针对开发板(除CAN口和EQEP)

V5 针对项目,配置了对应的外设(包含有EQEP)

V6 针对开发板,对EQEP进行了调试和配置

V7 添加控制程序

PWM初始状态:

(1)       上电为低电平

(2)       初始化GPIO之后变为低电平(InitGPio)

(3)       InitEPwmGpio之后为低电平(EPWM默认为不上拉(其他的为默认上拉),输入脚)

(4)       InitEPwm之后,高阻态(通过TZ实现的)

(6)如果PWM定时器中断的时间不够,可以改变ET的触发次数值来实现延长中断时间的目的,而不改变PWM的周期

TZ调试

(1)       开发板上由于复用了引脚,因此TZ3~TZ6都不可用,程序中使用了TZ1和TZ2 (要修改为TZ5和TZ6,只需用在InitEPwm中修改两处,以及将InitTzGpio中的注释部分去掉)

(2)       出现TZ将PWM置于高阻态,测量引脚实际是高电平

(3)       CBC(适用于电流限制)是出现TZ封锁,TZ消失后恢复(自动的);one shot(适用于短路电流和过流)是一旦出现,就一直保持是封锁状态(但也可以手动恢复:

//EALLOW;

//EPwm1Regs.TZCLR.bit.OST = 1;

//EPwm1Regs.TZCLR.bit.INT = 1;

// EDIS;

 

(4)       通过TZ来进行脉冲的封锁与使能

逻辑顺序是:关中断——封脉冲(softforce)——开脉冲(清除flag位)——开中断

使用232进行控制,232中断里完成清除flag位与开中断的任务。

 

(5)       将机侧和网侧都改为one shot trip sources,CBC在软件trip的时候不是很好用,无法封锁脉冲

 

SCI调试

(1)       使能FIFO,设置为接收一个数据便进入一次中断

(2)       串口调试助手应选择16进制发送,即在发送之前把发送内容变为16进制,这样DSP收到的数才正确

(3)       ScicRegs.SCIRXBUF.all里的数在读出之后便无效,使用观察窗口看不到接收到的数

(4)       如果是9600的波特率,5K的开关频率,限于通讯速率,如果发送使用查询模式,一次中断只发送一个数据。

 

CAN口调试

(1)       具有时间戳,可以考虑用中断方式进行接受,能够实现传输超时的检测

(2)       CAN口是总线,也可以理解为是半双工的,通过优先级进行仲裁

(3)       CAN只有在接受端接收到正确的数据,实现了握手,才能将TA置位

 

Ecap调试

(1)       上电高电平,

(2)       当通过禁止时钟来实现封锁APWM时 ,PWM一会儿高电平,一会儿低电平;因此可以考虑采用改变比较值来封锁脉冲。设置

实现封锁后一直输出高。

 

CpuTIMER调试

(1)       只使能timer0

(2)       预留了timer1和timer2的初始化与配置。如果程序过大,可以从此处精简

 

I2C调试

(1)       注意读写之间要加延时DELAY_US(10000)

(2)       64K与2K的EEPROM在数据格式上有差别:主要是64K的地址位更多

 

XINTF调试

(1)       原理图上存储芯片的CS信号为什么不和DSP的直接相连?难道是为了进一步的扩展?

(2)       On 28x devices, regions of memory where peripheral registers are common are protected from this order reversal by hardware. These regions of memory are said to be read-followed-by-write pipeline protected.XINTF Zone 0 is by default read-followed-by-write pipeline protected. Write and read accesses to Zone 0 are executed in the same order that they are written. For example, a write followed by a read is executed in the same order it was written

(3)      

eqed调试

(1)在高速时精度才能保证

比如对于1024线每转的码盘,如果计算周期T是100HZ,则绝对误差为 60×100/(1024×4)=1.5rmp

(2)如果.text文件很大将其放在一段放不下,需将其放到两个程序段中

最长的一个length=0x002000,也放不下时.可以这样处理:

PAGE 0 :

            PRAMH0     : origin = 0x3F8002, length = 0x0014FE
            L0RAM      : origin = 0x008000, length = 0x001000

 

SECTIONS

              .text:{*(.text)} >>PRAMH0|L0RAM

这样就可以将.text文件放在两个定义段中。

(3)浮点运算时,注意(1.0/(2048*4))

详细资料请下载附件

Terry Deng:

非常感谢您这样的超级粉丝

V4 所有外设配置,针对开发板(除CAN口和EQEP)

V5 针对项目,配置了对应的外设(包含有EQEP)

V6 针对开发板,对EQEP进行了调试和配置

V7 添加控制程序

PWM初始状态:

(1)       上电为低电平

(2)       初始化GPIO之后变为低电平(InitGPio)

(3)       InitEPwmGpio之后为低电平(EPWM默认为不上拉(其他的为默认上拉),输入脚)

(4)       InitEPwm之后,高阻态(通过TZ实现的)

(6)如果PWM定时器中断的时间不够,可以改变ET的触发次数值来实现延长中断时间的目的,而不改变PWM的周期

TZ调试

(1)       开发板上由于复用了引脚,因此TZ3~TZ6都不可用,程序中使用了TZ1和TZ2 (要修改为TZ5和TZ6,只需用在InitEPwm中修改两处,以及将InitTzGpio中的注释部分去掉)

(2)       出现TZ将PWM置于高阻态,测量引脚实际是高电平

(3)       CBC(适用于电流限制)是出现TZ封锁,TZ消失后恢复(自动的);one shot(适用于短路电流和过流)是一旦出现,就一直保持是封锁状态(但也可以手动恢复:

//EALLOW;

//EPwm1Regs.TZCLR.bit.OST = 1;

//EPwm1Regs.TZCLR.bit.INT = 1;

// EDIS;

 

(4)       通过TZ来进行脉冲的封锁与使能

逻辑顺序是:关中断——封脉冲(softforce)——开脉冲(清除flag位)——开中断

使用232进行控制,232中断里完成清除flag位与开中断的任务。

 

(5)       将机侧和网侧都改为one shot trip sources,CBC在软件trip的时候不是很好用,无法封锁脉冲

 

SCI调试

(1)       使能FIFO,设置为接收一个数据便进入一次中断

(2)       串口调试助手应选择16进制发送,即在发送之前把发送内容变为16进制,这样DSP收到的数才正确

(3)       ScicRegs.SCIRXBUF.all里的数在读出之后便无效,使用观察窗口看不到接收到的数

(4)       如果是9600的波特率,5K的开关频率,限于通讯速率,如果发送使用查询模式,一次中断只发送一个数据。

 

CAN口调试

(1)       具有时间戳,可以考虑用中断方式进行接受,能够实现传输超时的检测

(2)       CAN口是总线,也可以理解为是半双工的,通过优先级进行仲裁

(3)       CAN只有在接受端接收到正确的数据,实现了握手,才能将TA置位

 

Ecap调试

(1)       上电高电平,

(2)       当通过禁止时钟来实现封锁APWM时 ,PWM一会儿高电平,一会儿低电平;因此可以考虑采用改变比较值来封锁脉冲。设置

实现封锁后一直输出高。

 

CpuTIMER调试

(1)       只使能timer0

(2)       预留了timer1和timer2的初始化与配置。如果程序过大,可以从此处精简

 

I2C调试

(1)       注意读写之间要加延时DELAY_US(10000)

(2)       64K与2K的EEPROM在数据格式上有差别:主要是64K的地址位更多

 

XINTF调试

(1)       原理图上存储芯片的CS信号为什么不和DSP的直接相连?难道是为了进一步的扩展?

(2)       On 28x devices, regions of memory where peripheral registers are common are protected from this order reversal by hardware. These regions of memory are said to be read-followed-by-write pipeline protected.XINTF Zone 0 is by default read-followed-by-write pipeline protected. Write and read accesses to Zone 0 are executed in the same order that they are written. For example, a write followed by a read is executed in the same order it was written

(3)      

eqed调试

(1)在高速时精度才能保证

比如对于1024线每转的码盘,如果计算周期T是100HZ,则绝对误差为 60×100/(1024×4)=1.5rmp

(2)如果.text文件很大将其放在一段放不下,需将其放到两个程序段中

最长的一个length=0x002000,也放不下时.可以这样处理:

PAGE 0 :

            PRAMH0     : origin = 0x3F8002, length = 0x0014FE
            L0RAM      : origin = 0x008000, length = 0x001000

 

SECTIONS

              .text:{*(.text)} >>PRAMH0|L0RAM

这样就可以将.text文件放在两个定义段中。

(3)浮点运算时,注意(1.0/(2048*4))

详细资料请下载附件

BradGong:

您好,请教一个问题:

在初始化外设和GPIO时您觉得是先初始化配置GPIO然后再初始化其他外设(比如PWM);还是先配置其他外设再去配置GPIO?

V4 所有外设配置,针对开发板(除CAN口和EQEP)

V5 针对项目,配置了对应的外设(包含有EQEP)

V6 针对开发板,对EQEP进行了调试和配置

V7 添加控制程序

PWM初始状态:

(1)       上电为低电平

(2)       初始化GPIO之后变为低电平(InitGPio)

(3)       InitEPwmGpio之后为低电平(EPWM默认为不上拉(其他的为默认上拉),输入脚)

(4)       InitEPwm之后,高阻态(通过TZ实现的)

(6)如果PWM定时器中断的时间不够,可以改变ET的触发次数值来实现延长中断时间的目的,而不改变PWM的周期

TZ调试

(1)       开发板上由于复用了引脚,因此TZ3~TZ6都不可用,程序中使用了TZ1和TZ2 (要修改为TZ5和TZ6,只需用在InitEPwm中修改两处,以及将InitTzGpio中的注释部分去掉)

(2)       出现TZ将PWM置于高阻态,测量引脚实际是高电平

(3)       CBC(适用于电流限制)是出现TZ封锁,TZ消失后恢复(自动的);one shot(适用于短路电流和过流)是一旦出现,就一直保持是封锁状态(但也可以手动恢复:

//EALLOW;

//EPwm1Regs.TZCLR.bit.OST = 1;

//EPwm1Regs.TZCLR.bit.INT = 1;

// EDIS;

 

(4)       通过TZ来进行脉冲的封锁与使能

逻辑顺序是:关中断——封脉冲(softforce)——开脉冲(清除flag位)——开中断

使用232进行控制,232中断里完成清除flag位与开中断的任务。

 

(5)       将机侧和网侧都改为one shot trip sources,CBC在软件trip的时候不是很好用,无法封锁脉冲

 

SCI调试

(1)       使能FIFO,设置为接收一个数据便进入一次中断

(2)       串口调试助手应选择16进制发送,即在发送之前把发送内容变为16进制,这样DSP收到的数才正确

(3)       ScicRegs.SCIRXBUF.all里的数在读出之后便无效,使用观察窗口看不到接收到的数

(4)       如果是9600的波特率,5K的开关频率,限于通讯速率,如果发送使用查询模式,一次中断只发送一个数据。

 

CAN口调试

(1)       具有时间戳,可以考虑用中断方式进行接受,能够实现传输超时的检测

(2)       CAN口是总线,也可以理解为是半双工的,通过优先级进行仲裁

(3)       CAN只有在接受端接收到正确的数据,实现了握手,才能将TA置位

 

Ecap调试

(1)       上电高电平,

(2)       当通过禁止时钟来实现封锁APWM时 ,PWM一会儿高电平,一会儿低电平;因此可以考虑采用改变比较值来封锁脉冲。设置

实现封锁后一直输出高。

 

CpuTIMER调试

(1)       只使能timer0

(2)       预留了timer1和timer2的初始化与配置。如果程序过大,可以从此处精简

 

I2C调试

(1)       注意读写之间要加延时DELAY_US(10000)

(2)       64K与2K的EEPROM在数据格式上有差别:主要是64K的地址位更多

 

XINTF调试

(1)       原理图上存储芯片的CS信号为什么不和DSP的直接相连?难道是为了进一步的扩展?

(2)       On 28x devices, regions of memory where peripheral registers are common are protected from this order reversal by hardware. These regions of memory are said to be read-followed-by-write pipeline protected.XINTF Zone 0 is by default read-followed-by-write pipeline protected. Write and read accesses to Zone 0 are executed in the same order that they are written. For example, a write followed by a read is executed in the same order it was written

(3)      

eqed调试

(1)在高速时精度才能保证

比如对于1024线每转的码盘,如果计算周期T是100HZ,则绝对误差为 60×100/(1024×4)=1.5rmp

(2)如果.text文件很大将其放在一段放不下,需将其放到两个程序段中

最长的一个length=0x002000,也放不下时.可以这样处理:

PAGE 0 :

            PRAMH0     : origin = 0x3F8002, length = 0x0014FE
            L0RAM      : origin = 0x008000, length = 0x001000

 

SECTIONS

              .text:{*(.text)} >>PRAMH0|L0RAM

这样就可以将.text文件放在两个定义段中。

(3)浮点运算时,注意(1.0/(2048*4))

详细资料请下载附件

mangui zhang:

回复 BradGong:

这个初始化一般没有先后顺序     只有一些初始化过程中的等待时间需要注意一下

其实就是配置寄存器   各自都有自己的寄存器

V4 所有外设配置,针对开发板(除CAN口和EQEP)

V5 针对项目,配置了对应的外设(包含有EQEP)

V6 针对开发板,对EQEP进行了调试和配置

V7 添加控制程序

PWM初始状态:

(1)       上电为低电平

(2)       初始化GPIO之后变为低电平(InitGPio)

(3)       InitEPwmGpio之后为低电平(EPWM默认为不上拉(其他的为默认上拉),输入脚)

(4)       InitEPwm之后,高阻态(通过TZ实现的)

(6)如果PWM定时器中断的时间不够,可以改变ET的触发次数值来实现延长中断时间的目的,而不改变PWM的周期

TZ调试

(1)       开发板上由于复用了引脚,因此TZ3~TZ6都不可用,程序中使用了TZ1和TZ2 (要修改为TZ5和TZ6,只需用在InitEPwm中修改两处,以及将InitTzGpio中的注释部分去掉)

(2)       出现TZ将PWM置于高阻态,测量引脚实际是高电平

(3)       CBC(适用于电流限制)是出现TZ封锁,TZ消失后恢复(自动的);one shot(适用于短路电流和过流)是一旦出现,就一直保持是封锁状态(但也可以手动恢复:

//EALLOW;

//EPwm1Regs.TZCLR.bit.OST = 1;

//EPwm1Regs.TZCLR.bit.INT = 1;

// EDIS;

 

(4)       通过TZ来进行脉冲的封锁与使能

逻辑顺序是:关中断——封脉冲(softforce)——开脉冲(清除flag位)——开中断

使用232进行控制,232中断里完成清除flag位与开中断的任务。

 

(5)       将机侧和网侧都改为one shot trip sources,CBC在软件trip的时候不是很好用,无法封锁脉冲

 

SCI调试

(1)       使能FIFO,设置为接收一个数据便进入一次中断

(2)       串口调试助手应选择16进制发送,即在发送之前把发送内容变为16进制,这样DSP收到的数才正确

(3)       ScicRegs.SCIRXBUF.all里的数在读出之后便无效,使用观察窗口看不到接收到的数

(4)       如果是9600的波特率,5K的开关频率,限于通讯速率,如果发送使用查询模式,一次中断只发送一个数据。

 

CAN口调试

(1)       具有时间戳,可以考虑用中断方式进行接受,能够实现传输超时的检测

(2)       CAN口是总线,也可以理解为是半双工的,通过优先级进行仲裁

(3)       CAN只有在接受端接收到正确的数据,实现了握手,才能将TA置位

 

Ecap调试

(1)       上电高电平,

(2)       当通过禁止时钟来实现封锁APWM时 ,PWM一会儿高电平,一会儿低电平;因此可以考虑采用改变比较值来封锁脉冲。设置

实现封锁后一直输出高。

 

CpuTIMER调试

(1)       只使能timer0

(2)       预留了timer1和timer2的初始化与配置。如果程序过大,可以从此处精简

 

I2C调试

(1)       注意读写之间要加延时DELAY_US(10000)

(2)       64K与2K的EEPROM在数据格式上有差别:主要是64K的地址位更多

 

XINTF调试

(1)       原理图上存储芯片的CS信号为什么不和DSP的直接相连?难道是为了进一步的扩展?

(2)       On 28x devices, regions of memory where peripheral registers are common are protected from this order reversal by hardware. These regions of memory are said to be read-followed-by-write pipeline protected.XINTF Zone 0 is by default read-followed-by-write pipeline protected. Write and read accesses to Zone 0 are executed in the same order that they are written. For example, a write followed by a read is executed in the same order it was written

(3)      

eqed调试

(1)在高速时精度才能保证

比如对于1024线每转的码盘,如果计算周期T是100HZ,则绝对误差为 60×100/(1024×4)=1.5rmp

(2)如果.text文件很大将其放在一段放不下,需将其放到两个程序段中

最长的一个length=0x002000,也放不下时.可以这样处理:

PAGE 0 :

            PRAMH0     : origin = 0x3F8002, length = 0x0014FE
            L0RAM      : origin = 0x008000, length = 0x001000

 

SECTIONS

              .text:{*(.text)} >>PRAMH0|L0RAM

这样就可以将.text文件放在两个定义段中。

(3)浮点运算时,注意(1.0/(2048*4))

详细资料请下载附件

user4671742:

非常感谢,刚好我i2c有点问题,我一直觉得代码没错,试下你的加个延时

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28335的一些调试经验
分享到: 更多 (0)