我用2812外扩了一片AD,ths1230.采样率设为12.5MHZ,使用的是XINTF ZONE6,。但是经过检测发现,2812读数据的速度太慢了,前一段时间发帖问过TI的工程师,大家给了我一些建议,但现在读写速度还是很慢,大概6.25MHZ左右。
(1)我的程序如下:
头文件里对AD地址的定义:
#define ADCDATA *(volatile unsigned int * )(0x110000)
程序开头的定义:
volatile uint *ADCDest;
volatile uint *ADCSource;
主函数里面的部分程序:
while(1)
{
ADCSource=&ADCDATA;
ADCDest=Voltage; //Voltage[512]为存放转换后数据的数组;
for(i=0;i<512;i++)
{
*ADCDest++=*ADCSoutce++;
}
for(i=0;i<512;i++)
{
Voltage[i]=(Voltage[i]&0x0fff); //采集到的数据是12位的,所以将数据的高位置0;
}
}
(2)XINTF.c中,对外设时钟的设置如下:
XintfRegs.XINTCNF2.bit.XTIMCLK = 0;
XintfRegs.XINTCNF2.bit.WRBUFF = 0;
XintfRegs.XINTCNF2.bit.CLKOFF = 1;
XintfRegs.XINTCNF2.bit.CLKMODE = 0;
// Zone 6————————————
XintfRegs.XTIMING6.bit.XWRLEAD = 1; XintfRegs.XTIMING6.bit.XWRACTIVE = 1; XintfRegs.XTIMING6.bit.XWRTRAIL = 0;
XintfRegs.XTIMING6.bit.XRDLEAD = 1;
XintfRegs.XTIMING6.bit.XRDACTIVE = 0;
XintfRegs.XTIMING6.bit.XRDTRAIL = 1;
XintfRegs.XTIMING6.bit.X2TIMING = 0;
XintfRegs.XTIMING6.bit.USEREADY = 0;
XintfRegs.XTIMING6.bit.READYMODE = 1;
XintfRegs.XTIMING6.bit.XSIZE = 3;
XINTF的时钟已经设置到最高。
(3)我是通过检测xintf zone6的片选信号XZCS6的脉冲来判断时钟频率的,因为读XINTF相应区域数据时,会有低电平。
我的问题有:
(1)我的程序设置是不是有问题?
(2)是不是2812访问外扩接口的速度都很慢?最高能达到多少?我的2812开发板上有个外扩SRAM,但是我测了一下访问外扩RAM的时钟频率,貌似也只有6.5MHZ左右。
各种方法都尝试过了,TI的xintf手册也看了,但是还是没有达到要求,只要读写速度能达到12.5MHZ就可以了,可是现在貌似没有办法。麻烦大家给我多提些建议吧。谢谢了!
Jones Chen:
给您一个我用过的配置程序,仅供参考,另外不同的SRAM的参数不一定相同,我用的是ISSI的。
void Sram_init( void)
{
XintfRegs.XTIMING6.bit.X2TIMING = 0;
XintfRegs.XTIMING6.bit.XRDLEAD = 1;
XintfRegs.XTIMING6.bit.XRDACTIVE = 1;
XintfRegs.XTIMING6.bit.XRDTRAIL = 0;
XintfRegs.XTIMING6.bit.XWRLEAD = 1;
XintfRegs.XTIMING6.bit.XWRACTIVE = 1;
XintfRegs.XTIMING6.bit.XWRTRAIL = 0;
XintfRegs.XINTCNF2.bit.CLKMODE = 0;
}
我用2812外扩了一片AD,ths1230.采样率设为12.5MHZ,使用的是XINTF ZONE6,。但是经过检测发现,2812读数据的速度太慢了,前一段时间发帖问过TI的工程师,大家给了我一些建议,但现在读写速度还是很慢,大概6.25MHZ左右。
(1)我的程序如下:
头文件里对AD地址的定义:
#define ADCDATA *(volatile unsigned int * )(0x110000)
程序开头的定义:
volatile uint *ADCDest;
volatile uint *ADCSource;
主函数里面的部分程序:
while(1)
{
ADCSource=&ADCDATA;
ADCDest=Voltage; //Voltage[512]为存放转换后数据的数组;
for(i=0;i<512;i++)
{
*ADCDest++=*ADCSoutce++;
}
for(i=0;i<512;i++)
{
Voltage[i]=(Voltage[i]&0x0fff); //采集到的数据是12位的,所以将数据的高位置0;
}
}
(2)XINTF.c中,对外设时钟的设置如下:
XintfRegs.XINTCNF2.bit.XTIMCLK = 0;
XintfRegs.XINTCNF2.bit.WRBUFF = 0;
XintfRegs.XINTCNF2.bit.CLKOFF = 1;
XintfRegs.XINTCNF2.bit.CLKMODE = 0;
// Zone 6————————————
XintfRegs.XTIMING6.bit.XWRLEAD = 1; XintfRegs.XTIMING6.bit.XWRACTIVE = 1; XintfRegs.XTIMING6.bit.XWRTRAIL = 0;
XintfRegs.XTIMING6.bit.XRDLEAD = 1;
XintfRegs.XTIMING6.bit.XRDACTIVE = 0;
XintfRegs.XTIMING6.bit.XRDTRAIL = 1;
XintfRegs.XTIMING6.bit.X2TIMING = 0;
XintfRegs.XTIMING6.bit.USEREADY = 0;
XintfRegs.XTIMING6.bit.READYMODE = 1;
XintfRegs.XTIMING6.bit.XSIZE = 3;
XINTF的时钟已经设置到最高。
(3)我是通过检测xintf zone6的片选信号XZCS6的脉冲来判断时钟频率的,因为读XINTF相应区域数据时,会有低电平。
我的问题有:
(1)我的程序设置是不是有问题?
(2)是不是2812访问外扩接口的速度都很慢?最高能达到多少?我的2812开发板上有个外扩SRAM,但是我测了一下访问外扩RAM的时钟频率,貌似也只有6.5MHZ左右。
各种方法都尝试过了,TI的xintf手册也看了,但是还是没有达到要求,只要读写速度能达到12.5MHZ就可以了,可是现在貌似没有办法。麻烦大家给我多提些建议吧。谢谢了!
qin longhui:
Thank you ,Jones Chen !
你的方案我试过了,对于读写速度没有提高的。你当时有的也是2812吗?
我想问一下,这个是由于2812的主频不够还是什么原因?系统时钟我已经配置到150MHZ了,照理说,对XINTF区域的访问速度不会低到只有几MHZ吧?我看到网上有人说可以配置到33MHZ的。所以,我想确认一下:
现在的访问速度这么低,是由于我程序的问题还是2812从理论上来说就达不到那样的频率?
请各位工程师帮帮忙,现在这是我外扩的AD最关键也最急迫的问题了。
麻烦了!