求助,dsp程序在2812ram里面运行SCI通讯正常,而烧写到flash里面运行就不正常了

求助,dsp程序在2812ram里面运行SCI通讯正常,而烧写到flash里面运行就不正常了,第1张

这很正常,以前我第一次烧写的时候也发现了许多问题。

dsp的flash烧写比较麻烦,有时候光换cmd文件并不能保证程序在flash中正确运行。而且就算能正确运行,程序在flash中运行的速度比ram中要慢很多。这对实时性和通讯影响都非常大。一般都要编写启动代码,让烧写在flash中的程序,在启动的时候搬到ram中运行。这样速度会提高很多。我这里直接将启动代码和相关的flash中给你附上。你要做的就是:

1将库文件换成我给你的库文件

2启动代码用汇编编的,将启动代码添加的你的工程中。

3将原来的flash文件替换为我给你的这两个flash

最后你的工程应该是这样的,这里以ccs55为例:

所有选中的文件都要添加。

ps:有什么问题欢迎继续追问,当年我为了烧写这个都快郁闷死了,都将dsp锁死过。所以还是比较有经验的。

懒得看了,把我的能用的发个你

//ioremap address

int address_map(void)

{

//SPI registers

r_SPCON0 = ioremap(0x59000000,4);

r_SPSTA0 = ioremap(0x59000004,4);

r_SPPIN0 = ioremap(0x59000008,4);

r_SPPRE0 = ioremap(0x5900000C,4);

r_SPTDAT0 = ioremap(0x59000010,4);

r_SPRDAT0 = ioremap(0x59000014,4);

//I/O registers

r_GPACON=ioremap(0x56000000,4);

r_GPADAT=ioremap(0x56000004,4);

r_GPECON = ioremap(0x56000040,4);

r_GPEUP = ioremap(0x56000048,4);

r_GPGCON = ioremap(0x56000060,4);

r_GPGUP = ioremap(0x56000068,4);

r_GPGDAT = ioremap(0x56000064,4);

return 0;

}

//Initialize 2410 spi

void Init_SPI(void)

{

int i;

rSPPRE0 = 0xff; //2410 SPI_BAUD;

rSPCON0 = 0x18; //polling mode is used here!

for(i = 0 ; i < 10 ; i++)

{

rSPTDAT0 = 0xff;

}

rGPECON |= 0800000;

rGPECON &= (~0x05400000);

rGPEUP |= 0x3800;

//GPA13----->CS nGCS2 can not realize

rGPACON |=0x002000;

rGPADAT |=0x002000; //Unselect the chip

//GPG14----->CS

rGPGCON |= 0x10000000;

rGPGCON &= (~0x20000000);

rGPGUP &= (~0x4000);

rGPGDAT |=0x4000; //Unselect the chip

}

//To polling when SPI transfer is not finished

void spi_poll_done(void)

{

int nCount=0;

while(!(rSPSTA0 & 0x01) )

{

nCount++;

if(nCount>=5000)

{

printk("SPI state poll failed\n");

break;

}

}

}

//Transmit data

void spi_tx_data(unsigned char data)

{

spi_poll_done();

rSPTDAT0 = data; //transmit data

spi_poll_done();

}

//Write to MCP2510 with ONE byte

void Write_2510(unsigned char W_ADD, unsigned char W_DATA)

{

enable2510();

udelay(100000);

spi_tx_data(CMD_WRITE);

spi_tx_data(W_ADD);

spi_tx_data(W_DATA);

disable2510();

}

GpioMuxRegsGPAMUXall = 0x00FF

//是指GPA口的16个引脚中,高8个GPA16~GPA8引脚作为数字I/O口,而低8位的GPA7~GPA0作为其复用的外设设备引脚,GPA5到GPA0都是PWM功能的引脚,而GPA6、GPA7是定时器的输出。

EvaRegsACTRAall=0x0666;

//是指比较输出引脚的2、4、6为低有效、1、3、5为高有效。

还有就是,你用的TMS320F2812不是单片机,是DSP芯片。

LOAD_START(_RamfuncsLoadStart) 指ramfuncs这段代码的加载开始地址

LOAD_END(_RamfuncsLoadEnd),指ramfuncs这段代码的加载结束地址

意思是ramfuncs存储在哪,一般是FLASH

RUN_START(_RamfuncsRunStart),指ramfuncs这段代码的运行开始地址

意思是运行把ramfuncs拷到哪里执行~~~一般是RAM

r

stripsetPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b);

第一个参数n是彩带中LED的编号,最接近单片机引脚的编号为0;接下来的三个参数描述像素颜色,分别表示红色、绿色和蓝色的亮度级别,0为最暗,255是最大亮度;

stripsetPixelColor(uint16_t n, uint32_t c);

n是彩带中LED的编号,颜色color是一种32位类型,将红色,绿色和蓝色值合并为一个数字,有时这样做能提高程序的效率。通过下面的方法,可以将红色、绿色和蓝色值转换为32位类型。

uint32_t magenta = stripColor(red, green, blue);

stripsetBrightness(uint8_t);

一般只在setup()中调用,以保证在整个程序执行过程中LED颜色亮度的一致性。其实,在程序中通过合适的逻辑控制各像素的亮度值,可能动画效果更好。

stripshow();

该方法更新彩带上的全部LED。一个好的习惯是先利用setPixelColor()设置好整个彩带的颜色,然后再调用show()方法,以防止出现动画跳跃而不平滑。

以上就是关于求助,dsp程序在2812ram里面运行SCI通讯正常,而烧写到flash里面运行就不正常了全部的内容,包括:求助,dsp程序在2812ram里面运行SCI通讯正常,而烧写到flash里面运行就不正常了、SPI数据读写 来人帮我看看程序那里错误了吧 读不到数据、单片机2812的程序中的几句帮忙解释下等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/zz/9698906.html

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

发表评论

登录后才能评论

评论列表(0条)

保存