阅读:1914回复:15
D12 复位后!?
请各位仁兄帮忙:
D12 复位后我读取中断寄存器的值如下: 第一次中断: 0xc0; 第二次. .: 0x40; 第三次. .: 0x40; 第四次. .:0x80; 之后就没有中断产生.请教各位仁兄我上述中断过程中该如何处理,亦即接下来该如何做呢?!!!急....... |
|
沙发#
发布于:2003-03-03 11:26
我的和你的一样,希望那位大虾能伸出友谊之手,谢谢!
|
|
|
板凳#
发布于:2003-03-03 12:01
你固件有问题,我收到80.c0(顺序不是固定的)之后就收到01了..你如果没有收到01,(主机发送过来的命令),也许就是你初始化有问题了.
|
|
地板#
发布于:2003-03-03 15:29
dacongtou :
帮忙看一下,这是我的电路图和固件初始化,哪儿会有问题呢? 都已经3个星期了,没有任何进展。谢谢! |
|
|
地下室#
发布于:2003-03-04 12:15
这是我在你的主程序基础上改过的你在试一下.
void main() { EA=0; init_port(); init_timer0(); IT0 = 0; EX0 = 1; init_serial(); XmtBuff.out = 0x00; XmtBuff.in = 0x01; reconnect_USB(); while(1) { if(!D12_int_n) { //LED7=0; D12_COMMAND(0xf4);// 读中断寄存器 D12_DATAIN(); XmtBuff.b[0] = data2; if(XmtBuff.b[0] & 0x40) //usb_reset { LED6=0; } if(XmtBuff.b[0] & 0x80) { if(D12_suspend == 1) { LED7=0; D12_suspend=0;//处理挂起事务 D12_COMMAND (0xf6);//发送恢复命令 D12_suspend = 1; } } if(XmtBuff.b[0] & 0x01) { D12_COMMAND(0x40);//读 ep0 OUT 最后状态 D12_DATAIN(); XmtBuff.b[1]=data2; if(XmtBuff.b[1] & 0x20) {SETUP_read(); HandleSetup(); } } if(XmtBuff.b[0] & 0x02) { D12_COMMAND(0x41);//读 ep0 IN 最后状态 D12_DATAIN(); USB_submit(); } if(XmtBuff.b[0] & 0x04) { D12_COMMAND(0x421);//读 ep0 IN 最后状态 D12_DATAIN(); //此处加处理程序。 } if(XmtBuff.b[0] & 0x10) { D12_COMMAND(0x43);//读 ep0 IN 最后状态 D12_DATAIN(); //此处加处理程序。 } if(XmtBuff.b[0] & 0x20) { D12_COMMAND(0x44);//读 ep0 IN 最后状态 D12_DATAIN(); //此处加处理程序。 } if(XmtBuff.b[0] & 0x40) { D12_COMMAND(0x45);//读 ep0 IN 最后状态 D12_DATAIN(); //此处加处理程序。 } /*else { if(XmtBuff.b[0] & 0x15)// 收到 OUT 包 { //if(ii[0]==12) //ii[0]=ii[0]; if(XmtBuff.b[0] & 0x01) { LED4=0; D12_COMMAND(0x40);//读 ep0 OUT 最后状态 D12_DATAIN(); XmtBuff.b[1]=data2; if(XmtBuff.b[1] & 0x20)// 收到 SETUP 包 { SETUP_read(); HandleSetup();} } else if(XmtBuff.b[0] & 0x04) { D12_COMMAND ( 0x42);//读ep1 OUT 最后状态 D12_DATAIN(); XmtBuff.b[0] = data2; ep_read(0x02); } else if(XmtBuff.b[0] & 0x10) { D12_COMMAND( 0x44);//读ep2 OUT 最后状态 D12_DATAIN(); } } else if(XmtBuff.b[0] & 0x2a)// 收到 IN 包 { LED3=0; if(ii[1]==18) ii[0]=ii[0]; if(XmtBuff.b[0] & 0x02) XmtBuff.in = 1; else if(XmtBuff.b[0] & 0x08) XmtBuff.in = 3; else if(XmtBuff.b[0] & 0x20) XmtBuff.in = 5; D12_COMMAND(XmtBuff.in | 0x40);// 读 IN 最后状态 D12_DATAIN(); XmtBuff.b[1] = data2; } } } } //2*/ } |
|
5楼#
发布于:2003-03-04 15:09
还是不行,帮忙看一下,读写控制信号是否有问题,
难道读写数据必须用指针方式吗? void D12_DATAOUT(unsigned char data1) { D12_A0 = 0; WR1=0; RD1=1; P0 = data1 ; RD1=1; WR1=1; } void D12_COMMAND (unsigned char command ) { D12_A0 = 1; WR1=0; RD1=1; P0 = command ; RD1=1; WR1=1; } unsigned char D12_DATAIN(void) { D12_A0 = 0; WR1=1; RD1=0; data2=P0; WR1=1; RD1=1; return data2; } |
|
|
6楼#
发布于:2003-03-04 20:15
我觉得最好用读写内存的指令就不用处理WR,RD信号而还简洁一些!?
|
|
7楼#
发布于:2003-03-05 08:54
问题是我必须控制rd wr信号,否则不能正常读写。也不知道是什么问题?
|
|
|
8楼#
发布于:2003-03-05 11:32
不满你说我就是在你的程序的基础上改成的现在枚举已经成功?
我的RD,WR 用的是内存寻址指令。我用的是80c196kc MCU。 |
|
9楼#
发布于:2003-03-05 12:16
想问一下,是不是只能用内存寻址指令才能成功,用控制rd wr方式不行吗?
|
|
|
10楼#
发布于:2003-03-05 12:18
能否将你的源代码发给我看一下呢?
email: dillhu@mxic.com.cn |
|
|
11楼#
发布于:2003-03-07 17:06
可以用WR,RD方式访问。
试一下下面的代码:( 若还不行,则可能是一些数据你未送给HOST,送数据前面的条件判断有问题,导致该送的数据未送,端点使能了吗? ) #include <intrins.h> static void Delay(void) { _nop_(); _nop_(); _nop_(); } void D12_DATAOUT(unsigned char data1) { D12_A0 = 0; P0 = data1 ; Delay(); WR1=0; Delay(); WR1=1; } void D12_COMMAND (unsigned char command ) { D12_A0 = 1; P0 = command ; Delay(); WR1=0; Delay(); WR1=1; } unsigned char D12_DATAIN(void) { D12_A0 = 0; RD1=0; Delay(); data2=P0; RD1=1; return data2; } |
|
12楼#
发布于:2003-03-08 14:12
谢谢楼上的仁兄,我在试试看。
|
|
|
13楼#
发布于:2003-03-10 10:12
还是不行,惨了
|
|
|
14楼#
发布于:2003-03-10 22:13
D12上电后延时至少3毫秒芯片才能完成复位,至少3毫秒后才能操作D12芯片,在程序开始处加一点延时试一下,祝你好运
|
|
15楼#
发布于:2003-03-11 17:13
还不行,我只能等样板到了,在回过来解决吧!
|
|
|