阅读:1864回复:14
D12的EOT引脚到底该怎样接?
D12的EOT引脚到底该怎样接呢?
我现在做用S3C44B0X来控制D12来进行数据传输,可发现硬件连接好后,只要一插上USB电缆,D12的AN中断引脚就一直保持低电平(自供电),而且对D12进行读写操作都无效(仔细校对过读写时序),问周立功的技术人员,他们说可能是EOT引脚没链接对。一个说接高(NO DMA),一个说通过一个电阻接到USB总线上的+5V上(自供电),可我都过了,还是不能对D12进行读写操作(硬件链接无误) 下面是链接图!请高手指教!!! |
|
沙发#
发布于:2004-03-17 11:22
电路图
|
|
板凳#
发布于:2004-03-17 11:37
通过电阻接高就可以了
|
|
|
地板#
发布于:2004-03-17 12:46
DMACK通过电阻接高
|
|
|
地下室#
发布于:2004-03-17 13:31
EOT是双功能脚。 除了用于DMA功能外,还用于Vbus检测。 无论你是否自供电,Vbus检测功能是要的。 实现Vbus检测的方法很简单:EOT上接两个电阻:一个接地,一个接Vbus(对于自供电系统不是VCC)。接地电阻要比接Vbus的电阻大10倍。可以分别为20k和200k. 另外,DMAACK也要借高的。 你应该会恰当使用A0和CS吧!如果还有问题,可以把接口代码传上来。 首先一定要保证D12不是坏片呦!很多人会犯愚昧的错误的:) |
|
|
5楼#
发布于:2004-03-17 14:38
一般不用DMA时候,那几个引脚,不用就行了
|
|
|
6楼#
发布于:2004-03-17 14:55
/* **************************************************************************************************** * * PHILIPS PDUSBD12 DRIVERS FOR NUCLEUS * * (c) Copyright 2003-2015, Zhang Zhi-gang * All Rights Reserved * * PDUSBD12 DRIVERS Program for 1.0 * * File Name : USB_D12_PHY.C * By Write : Zhang Zhi-gang ( Barry Zhang ) * First Write : 2004-02-24 10:14 * Last Write : 2004-02-24 10:14 * where Write : Room B201 Shenzhen International Tech-innovation Academy, Kejinan 10 Road, * High-Tech Industrial Park,Shenzhen,China. * Function : S3C44B0X与PDIUSBD12的接口 * 1. GPC15为D12挂起控制引脚 1:挂起; 0:正常 * 2. GPC14为D12的A0控制引脚 A0=1:命令; A0=0:数据 * 3. 片选为S3C44B0X的CS3---0x06000000 **************************************************************************************************** */ #include "USB_D12_DEFS.H" #include "USB_D12_EXTR.H" #include "nucleus.h" #include "S3C44B0X.h" extern EPPFLAGS bEPPflags; extern CONTROL_XFER ControlData; /* **************************************************************************************************** * 设置GPC15为USB挂起控制引脚 * 功 能:设置GPC15为USB挂起控制引脚 **************************************************************************************************** */ void SET_GPC15_2_SUSPEND_Signal(void) { UINT32 REG_Val; REG_Val = rPCONC; REG_Val &= 0x3FFFFFFF; REG_Val |= 0x40000000; rPCONC = REG_Val; rPDATC = 0x0000; //置低,使D12有效 } /* **************************************************************************************************** * 挂起USB * 功 能:挂起USB(SUSPEND_Signal = 1) **************************************************************************************************** */ void SUSPEND_USB(void) { rPDATC = 0x8000; //Bit15 = 1 } /* **************************************************************************************************** * 唤醒USB * 功 能:唤醒USB(SUSPEND_Signal = 0) **************************************************************************************************** */ void Awake_USB(void) { rPDATC = 0x0000; //Bit15 = 0 } /* **************************************************************************************************** * 判断USB设备是否为挂器状态 * 功 能:判断USB设备是否为挂器状态 **************************************************************************************************** */ unsigned int USB_Is_Suspend( void ) { UINT32 REG_Val; unsigned int Status; REG_Val = rPCONC; //设置GPC15为输入引脚 REG_Val &= 0x3FFFFFFF; rPCONC = REG_Val; REG_Val = rPDATC; //读取GPC15引脚的状态 Status = REG_Val&0x8000; REG_Val = rPCONC; //恢复GPC15为输出引脚 REG_Val &= 0x3FFFFFFF; REG_Val |= 0x40000000; rPCONC = REG_Val; return Status; } /* **************************************************************************************************** * 设置GPC14为I/O * 描 述:设置GPC14为I/O,用于控制D12的A0,选择命令或是数据 **************************************************************************************************** */ void Set_GPC14_2_D12A0( void ) { UINT32 REG_Value; REG_Value = rPCONC; REG_Value &= 0xCFFFFFFF; //清零BIT28/29 REG_Value |= 0x5FFFFFFF; //设置BIT28/29 rPCONC = REG_Value; //写寄存器,设置GPC14为I/O rPDATC = 0x0000; //设置为0,数据 } /* **************************************************************************************************** * 输入命令指令 * 描 述:对PDIUSBD12输入命令指令,设置它 **************************************************************************************************** */ void INPUT_Command( unsigned char Data ) { rPDATC = 0x4000; //设置I/O为1,命令 *((UINT32 *) D12_Addr) = Data; //DelayX1ms( 1 ); } /* **************************************************************************************************** * 输入数据 * 描 述:对PDIUSBD12输入数据 **************************************************************************************************** */ void INPUT_Data( unsigned char Data ) { rPDATC = 0x0000; //设置I/O为0,数据 *((UINT32 *) D12_Addr) = Data; } /* **************************************************************************************************** * 读出数据 * 描 述:从PDIUSBD12读出数据 **************************************************************************************************** */ unsigned char Read_Data( void ) { unsigned char Data; rPDATC = 0x0000; //设置I/O为0,数据 Data = *((UINT32 *) D12_Addr); //DelayX1ms( 1 ); return Data; } /* **************************************************************************************************** * 开USB中断(INT2) * 描 述:PDIUSBD12---占用INT2,开中断(INT2) **************************************************************************************************** */ void USB_Int_Enable( void ) { UINT32 INT_REG_VAL; INT_REG_VAL = rINTMSK; //读取中断屏蔽寄存器(INTMSK)中内容 INT_REG_VAL &= USB_INT_ENABLE_VALUE; rINTMSK = INT_REG_VAL; } /* **************************************************************************************************** * 关USB中断(INT2) * 描 述:PDIUSBD12---占用INT2,开中断(INT2) **************************************************************************************************** */ void USB_Int_Disable( void ) { UINT32 INT_REG_VAL; INT_REG_VAL = rINTMSK; //读取中断屏蔽寄存器(INTMSK)中内容 INT_REG_VAL |= USB_INT_DISABLE_VALUE; rINTMSK = INT_REG_VAL; } /* **************************************************************************************************** * 初始化EINT2 * 功 能:初始化EINT2 **************************************************************************************************** */ void Init_USB_INT( void ) { unsigned int REG_VAL; REG_VAL = rPCONG; //读控制寄存器 REG_VAL |= 0x0030; //设置对应位 rPCONG = REG_VAL; //写寄存器 rINTMSK = 0x37FFFFF; //使能EINT2 } 这是接口部分代码, GPC15为D12挂起控制引脚 1:挂起; 0:正常 GPC14为D12的A0控制引脚 A0=1:命令;A0=0:数据 片选为S3C44B0X的CS3---0x06000000 DMAACK是连一4.7K接高的, |
|
7楼#
发布于:2004-03-17 15:00
那就那样做啊
|
|
|
8楼#
发布于:2004-03-17 15:15
指针D12_Addr的定义是怎样的?
为何在void INPUT_Command( unsigned char Data ) 等函数中没有设置A0的代码,也没有片选的代码? |
|
|
9楼#
发布于:2004-03-17 15:24
指针D12_Addr的定义是怎样的? D12_Addr的定义是Ox06000000 //D12的地址定义---S3C44B0X的CS3 #define D12_Addr 0x06000000 //片选CS3 片选用的是S3C44B0X的片选3(CS3),这不需要代码的,当你寻址在0x06000000地址时,片选时自动有效的! **************************************************************************************************** * 设置GPC14为I/O * 描 述:设置GPC14为I/O,用于控制D12的A0,选择命令或是数据 **************************************************************************************************** */ void Set_GPC14_2_D12A0( void ) { UINT32 REG_Value; REG_Value = rPCONC; REG_Value &= 0xCFFFFFFF; //清零BIT28/29 REG_Value |= 0x5FFFFFFF; //设置BIT28/29 rPCONC = REG_Value; //写寄存器,设置GPC14为I/O rPDATC = 0x0000; //设置为0,数据 } /* **************************************************************************************************** * 输入命令指令 * 描 述:对PDIUSBD12输入命令指令,设置它 **************************************************************************************************** */ void INPUT_Command( unsigned char Data ) { rPDATC = 0x4000; //设置I/O为1,命令 *((UINT32 *) D12_Addr) = Data; //DelayX1ms( 1 ); } /* **************************************************************************************************** * 输入数据 * 描 述:对PDIUSBD12输入数据 **************************************************************************************************** */ void INPUT_Data( unsigned char Data ) { rPDATC = 0x0000; //设置I/O为0,数据 *((UINT32 *) D12_Addr) = Data; } 这就是AO的设置代码啊, void Set_GPC14_2_D12A0( void ) 设置GPC14为I/O,用于控制D12的A0,选择命令或是数据 void INPUT_Command( unsigned char Data )中的 rPDATC = 0x4000; //设置I/O为1,命令 就是AO置1 void INPUT_Data( unsigned char Data )中的 rPDATC = 0x0000; //设置I/O为0,数据 就是AO置0 |
|
10楼#
发布于:2004-03-17 15:30
D12芯片应该是好的,时钟信号正常CLKOUT输出也正常
|
|
11楼#
发布于:2004-03-17 15:38
你的MCU我没用过,不过经过你的解释我已经懂了。
那为什么你的图上面A0接Addr0呢?这和你的代码不符呀? |
|
|
12楼#
发布于:2004-03-17 15:42
我用WORD划的图,写错了,Sorry!!!
你有MSN吗?我想和你交流交流!!! MSN: hustd6zzg@hotmail.com 在深圳科技园 |
|
13楼#
发布于:2004-03-17 15:49
你的MSN脱机呀?
|
|
|
14楼#
发布于:2004-03-17 16:31
如果你有双踪示波器或逻辑分析仪的话,可以跟踪看你对D12进行操作时候的时序。
另:我回忆起了数年前的一个现象:我手工焊接的板子,D12出现了故障:片选无法正常拉低! 当时的做法是将之对地下拉500欧姆! 如果你的板子不复杂,可以将D12的片选接地试一试。 当时的原因是焊接过程可能损坏了片内的上拉三极管之类的东西。 |
|
|