|
本帖最后由 ajfan 于 2024-4-9 20:35 编辑
请教各位大神,C8051F340连FT232H工作在异步FIFO口模式,F340---》FT232H---》PC,上位机用labview,目前数据可以通过F340往PC上传,但是PC端读取的数据都是间隔4的数据,硬件使用的是淘宝买的FT232H的开发板,硬件故障的概率比较小,有可能还是逻辑,时序或上位机的问题,有大神可以指点一下迷津么?
(我的理解是FT232H的FIFO如果没有满,对应TXE为低,送数据给FIFO data口,MCU控制WR口由高变低传送一个Byte的数据,循环WR由高变低传送对应的Bytes,直到FIFO满TXE为高停止)
(上位机先找到对应的USB端口,然后设定SetLatencyTimer和SetUSBParameters,然后purge清除FIFO口数据,然后循环查询FT_GetStatus如果接收FIFO 不为空则对应将数据用FT_Read读取出来,这里FIFO 字节数好像也不对,不应该是65536,FIFO好像也就256或512不可能读到65536,难道是下载的FT232H labview API有问题???)
另外TXE的t7感觉时间有点短,最小49ns,但TXE是FT232H给出来的,控制不了,总感觉实测TXE和WR波形怪怪的。
F340工作在48MHZ
F340的P3口连接到FT232H的FIFO data口。
//---------------------------------------------------------------------------------
#include <C8051F340.H>
#include <string.h>
#include <intrins.h>
#include<stdlib.h>
sbit FT232_RXF=P0^0;
sbit FT232_TXE=P0^1;
sbit FT232_RD=P0^3;
sbit FT232_WR=P0^4;
void Port_IO_Init()
{
P0MDOUT = 0x18;
P3MDOUT = 0xFF; //P3数据给FT232H
XBR1 = 0x40;
}
void Oscillator_Init()
{
int i = 0;
CLKMUL = 0x80;
for (i = 0; i < 20; i++); // Wait 5us for initialization
CLKMUL |= 0xC0;
while ((CLKMUL & 0x20) == 0);
CLKSEL = 0x03;
}
void delay_1us(void)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
void delay_1ms(void)
{
unsigned int i;
for(i=2184;i>0;i--);
}
void delay_ms(unsigned int i)
{
for(i;i>0;i--)
{
delay_1ms();
}
}
//------------------------------------------------------------------------------------------
//=================================================================================
// 主函数定义
//=================================================================================
void main()
{
PCA0MD &= ~0x40; //禁止看门狗
Port_IO_Init();
Oscillator_Init();
FT232_RD=1;
FT232_WR=1;
while(1)
{
unsigned int h=0;
for (h = 0; h < 256; h++)
{
if(FT232_TXE==0)
{
P3=h;
P3=h; //delay t8>5ns
FT232_WR=0;
FT232_WR=0; //delay t10>30ns
FT232_WR=0; //delay t10>30ns
FT232_WR=1;
}
}
}
} |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|