|
大家好!我是个新手,最近对CH374感兴趣,要通过它和mega6调游戏手柄,网上资料太少,CH374EVT包不知道为什么用不了,根据技术手册时序图只写了些子函数,但要输什么具体命令却不知道,尝试了一下不成功,不知道程序该怎么写,希望大家能提供些信息,谢谢!
#define usb_port1 PORTA
#define usb_ddr1 DDRA
#define usb_pin1 PINA
#define usb_port2 PORTB
#define usb_ddr2 DDRB
#define usb_pin2 PINB
#define usb_A0 1<<PA4
#define usb_RD 1<<PA5
#define usb_WR 1<<PA6
#define usb_CS 1<<PA7
#define usb_INT 1<<PA0
#define set_usb_A0() (usb_port1 |= usb_A0)
#define clr_usb_A0() (usb_port1 &= ~usb_A0)
#define set_usb_RD() (usb_port1 |= usb_RD)
#define clr_usb_RD() (usb_port1 &= ~usb_RD)
#define set_usb_WR() (usb_port1 |= usb_WR)
#define clr_usb_WR() (usb_port1 &= ~usb_WR)
#define set_usb_CS() (usb_port1 |= usb_CS)
#define clr_usb_CS() (usb_port1 &= ~usb_CS)
#define set_usb_INT() (usb_port1 |= usb_INT)
#define clr_usb_INT() (usb_port1 &= ~usb_INT)
void delay(int s)
{
while(s--);
}
void usb_init()
{
usb_ddr1 |=(usb_A0|usb_RD|usb_WR|usb_CS);
usb_port1|=(usb_A0|usb_RD|usb_WR|usb_CS);
usb_port1|= ( usb_INT);
usb_ddr2 =0x00;
DDRC=0xff;
PORTC=0xff;
delay(50);
}
unsigned char usb_read()
{
unsigned char data;
clr_usb_WR();
set_usb_WR();
delay(140);
clr_usb_A0();
delay(10);
clr_usb_RD();
delay(35);
data=usb_pin2;
delay(10);
set_usb_RD();
set_usb_CS();
set_usb_A0();
return data;
}
unsigned char usb_write_data(unsigned char data)
{
clr_usb_RD();
set_usb_RD();
delay(140);
clr_usb_A0();
delay(10);
clr_usb_WR();
delay(35);
usb_port2=data;
delay(10);
set_usb_WR();
set_usb_CS();
set_usb_A0();
}
unsigned char usb_write_cmd(unsigned char cmd)
{
clr_usb_RD();
set_usb_RD();
delay(140);
set_usb_A0();
delay(10);
clr_usb_WR();
delay(35);
usb_port2=cmd;
delay(10);
set_usb_WR();
set_usb_CS();
set_usb_A0();
}
只是根据时序图写的,不知道能不能用,希望得到大家的指导,谢谢! |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|