This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好,我最近要做TMS320F28335的usb模块的开发,我是买的一个usb芯片,但是不知道怎么连接f283385,具体的软件开发流程也还不太懂,希望大神们有什么相关资料能跟我分享一下不,感激不尽啊!!!
哦,我买的是CH375一个USB模块,它需要与f28335连接的引脚如图:
你可以使用XINTF功能,28335具有DMA功能,数据传输速度会比较快;当然用GPIO模拟总线接口也可以,28335速度150M已经很快了,操作这个芯片没有什么问题。
至于驱动代码,这个肯定是必需要写的,其实就是对CH375的一个设置,完成设置后,在操作传输数据;
建议使用XINTF加DMA功能,设置会麻烦些,设置好后,传输数据是非常简单的
恩,感谢您的回复,昨天刚用XINTF的zone7完成了硬件的连接,现在在CCS上配置CH375,现在的想法是先用dsp控制CH375读取U盘,发现他们的代码都是基于51的,太庞杂,现在还无法入手写代码,很迷茫啊。
恩,谢谢您的鼓励,还有个小问题想问一下你,我选择的zone7是16位的数据总线,zone7映射的物理地址是0x0020 0000 ----0x0030 0000,那我现在的数据地址是多少啊?
0x0020 0000 ----0x0030 0000
因为只需A0连接地址线,有很多地址都可用
建议使用0x0020 0000 +A0
如果我的回复解答了您的疑问,请将该回复标绿,让更多人看到。谢谢!
onebyte,还有个问题您帮我看下,我是使用Zone7的一个A0,和D0到D7连接CH375芯片,那这个芯片需不需要还映射到zone7区域去(也就是需不需要写zone7相关的CMD文件),如果需要写,那这个关于zone7的cmd该怎么写呢。(我也查看了一些zone区域连接芯片的东西,他们说是把芯片的寄存器映射过去就可以了,具体到我这个也没什么寄存器啊)。
onebyte,还有个问题您帮我看下,我是使用Zone7的一个A0,和D0到D7连接CH375芯片,那这个芯片需不需要还映射到zone7区域去(也就是需不需要写zone7相关的CMD文件),如果需要写,那这个关于zone7的cmd该怎么写呢。(我也查看了一些zone区域连接芯片的东西,他们说是把芯片的寄存器映射过去就可以了,具体到我这个也没什么寄存器啊)。
onebyte大哥,又要麻烦一下您了,这是我设置的访问zone0的代码,您看一下是不是哪里有问题,我运行之后用万用表测了XZCS0的电压一直都是高电平。我的代码如下:
#define CH375Cmd *(volatile UINT32*)(0x4001) /*总线方式*/ //命令端口
#define CH375Dat *(volatile UINT32*)(0x4000) //数据端口
void init_zone0(void)
{
SysCtrlRegs.PCLKCR3.bit.XINTFENCLK = 1;
// Configure the GPIO for XINTF with a 16-bit data bus
// This function is in DSP2833x_Xintf.c
InitXintf16Gpio();
EALLOW;
// All Zones---------------------------------
// Timing for all zones based on XTIMCLK = SYSCLKOUT
XintfRegs.XINTCNF2.bit.XTIMCLK = 0; //XTIMCLK = SYSCLKOUT/1
// Buffer up to 3 writes
XintfRegs.XINTCNF2.bit.WRBUFF = 0; //0 writing buffer
// XCLKOUT is enabled
XintfRegs.XINTCNF2.bit.CLKOFF = 0; //使能XCLKOUT
// XCLKOUT = XTIMCLK
XintfRegs.XINTCNF2.bit.CLKMODE = 0;//XCLKOUT is equal to XTIMCLK
XintfRegs.XBANK.bit.BCYC = 0; // Add 7 cycles
XintfRegs.XBANK.bit.BANK = 0; // select zone 0
// Zone 0------------------------------------
// When using ready, ACTIVE must be 1 or greater
// Lead must always be 1 or greater
// Zone write timing
XintfRegs.XTIMING0.bit.XWRLEAD = 2;
XintfRegs.XTIMING0.bit.XWRACTIVE = 4;
XintfRegs.XTIMING0.bit.XWRTRAIL = 2;
// Zone read timing
XintfRegs.XTIMING0.bit.XRDLEAD = 2;
XintfRegs.XTIMING0.bit.XRDACTIVE = 4;
XintfRegs.XTIMING0.bit.XRDTRAIL =2;
// don't double all Zone read/write lead/active/trail timing
XintfRegs.XTIMING0.bit.X2TIMING = 0;
// Zone will not sample XREADY signal
XintfRegs.XTIMING0.bit.USEREADY = 0;
XintfRegs.XTIMING0.bit.READYMODE = 0;
// 1,1 = x16 data bus
// 0,1 = x32 data bus
// other values are reserved
XintfRegs.XTIMING0.bit.XSIZE = 3;
EDIS;
//Force a pipeline flush to ensure that the write to
//the last register configured occurs before returning.
asm(" RPT #7 || NOP");
}
int main(void)
{
InitSysCtrl();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
init_zone0();
CH375Dat = 0x12;
mDelaymS(100 ); /* 延时50ms */
return 0;
}
(volatile UINT32*) 你用的是x16 data bus,改为UINT16
执行下面代码的意图是什么,因为CH375Dat = 0x12;执行很快,你用万用表是量不到低电平的,最好用示波器看一下
int main(void)
{
InitSysCtrl();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
init_zone0();
CH375Dat = 0x12;
mDelaymS(100 ); /* 延时50ms */
return 0;
}
哦,好我等会在用示波器测一下!
我执行CH375Dat = 0x12 就是想随便往数据总线上写数据(即写入10010)达到访问zone0区域的目的,然后我拿万用表测了D0-D7引脚和XCS0,全部都是高电平,这是不是就是说我连访问zone0区域的目的都没达到,还是它运行太快,我没看到。另外我那些设置访问zone0的代码没有问题吧。 谢谢您了!