usb鼠标_中断处理(3)

1220阅读 0评论2016-06-14 ifndef
分类:嵌入式

开发环境:win7
开发板    :51单片机 + pdiusbd12 芯片

导致中断产生的事件有USB总线复位,进入挂起状态,成功接收到数据和发送完数据。

1,中断寄存器
    读中断寄存器
    命令F4
    数据读2字节
    中断寄存器字节1 
    

    中断寄存器字节2 
     

    总线复位  在总线复位后将产生一个中断将该位置1 总线复位与通过RESET_N脚的硬件复位基本相同有一点除外就是总线复位产生一个中断并且器件在默认地址0处使能。
    挂起改变  当PDIUSBD12没有收到3个SOF时将会进入挂起状态并将挂起改变位置位任何挂起或唤醒状态的改变都会将该位置位并产生中断。
    DMA EOT   该位表示DMA操作已结束

2,读中断寄存器的实现

点击(此处)折叠或打开

  1. // 中断寄存器
  2. typedef union
  3. {
  4.     uint8_t        regsiter_data[2];
  5.     struct
  6.     {
  7.         // byte 1,interrupt source
  8.         uint8_t        control_out_endpoint    :1;
  9.         uint8_t        control_in_endpoint        :1;
  10.         uint8_t        endpoint_1_out            :1;
  11.         uint8_t        endpoint_1_in            :1;
  12.         uint8_t        main_out_endpoint        :1;
  13.         uint8_t        main_in_endpoint        :1;
  14.         uint8_t        bus_reset                :1;
  15.         uint8_t        suspend_change            :1;

  16.         // byte 2
  17.         uint8_t        dma_eot                    :1;
  18.         uint8_t        reserved                :7;                
  19.     }interrupt_bit;
  20. }interrupt_t;

点击(此处)折叠或打开

  1. interrupt_t        read_interrupt(void)
  2. {
  3.     interrupt_t        ret;

  4.          // 写入命令
  5.      write_com(READ_INTERRUPT);
  6.     ret.regsiter_data[0]    = read_byte();
  7.     ret.regsiter_data[1]    = read_byte();

  8.     return ret;
  9. }

源码:mouse.zip

运行结果:





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

且看下回分解。


上一篇:usb 概述
下一篇:usb鼠标_读取主机发送到端点0的数据(4)