这很正常,以前我第一次烧写的时候也发现了许多问题。
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的程序中的几句帮忙解释下等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)