开发板 :51单片机 + pdiusbd12 芯片
导致中断产生的事件有USB总线复位,进入挂起状态,成功接收到数据和发送完数据。
1,中断寄存器
读中断寄存器
命令F4h
数据读2字节
中断寄存器字节1

中断寄存器字节2

总线复位 在总线复位后将产生一个中断将该位置1 总线复位与通过RESET_N脚的硬件复位基本相同有一点除外就是总线复位产生一个中断并且器件在默认地址0处使能。
挂起改变 当PDIUSBD12没有收到3个SOF时将会进入挂起状态并将挂起改变位置位任何挂起或唤醒状态的改变都会将该位置位并产生中断。
DMA EOT 该位表示DMA操作已结束
2,读中断寄存器的实现
点击(此处)折叠或打开
-
// 中断寄存器
-
typedef union
-
{
-
uint8_t regsiter_data[2];
-
struct
-
{
-
// byte 1,interrupt source
-
uint8_t control_out_endpoint :1;
-
uint8_t control_in_endpoint :1;
-
uint8_t endpoint_1_out :1;
-
uint8_t endpoint_1_in :1;
-
uint8_t main_out_endpoint :1;
-
uint8_t main_in_endpoint :1;
-
uint8_t bus_reset :1;
-
uint8_t suspend_change :1;
-
-
// byte 2
-
uint8_t dma_eot :1;
-
uint8_t reserved :7;
-
}interrupt_bit;
- }interrupt_t;
点击(此处)折叠或打开
-
interrupt_t read_interrupt(void)
-
{
-
interrupt_t ret;
-
-
// 写入命令
-
write_com(READ_INTERRUPT);
-
ret.regsiter_data[0] = read_byte();
-
ret.regsiter_data[1] = read_byte();
-
-
return ret;
- }
源码:
mouse.zip运行结果:



疑问:根据串口显示的数据可以看出,在连接USB之后,主机对设备进行了几次复位操作,然后就往端口发送数据(因为产生了端口输出中断),
那么主机发送什么数据到端口呢?
且看下回分解。