当前位置:首页 > 单片机 > 单片机
[导读] 以前做过usb下载的东东,现在把它搞到u-boot-2010.06-rc1上去.网上有usb下载的代码,可以在这儿下载:http://blogimg.chinaunix.net/blog/upfile2/100109001526.bz2一. 先编译过再说1.下载后,解压到u-boot

以前做过usb下载的东东,现在把它搞到u-boot-2010.06-rc1上去.

网上有usb下载的代码,可以在这儿下载:

http://blogimg.chinaunix.net/blog/upfile2/100109001526.bz2

一. 先编译过再说

1.下载后,解压到u-boot-2010.06-rc1/drivers/usb/slave目录

并在顶层Makefile中添加:LIBS += drivers/usb/slave/libusb_slave.a

2. 将driver/usb/slave/目录下所有C文件所个替换

  1. a.

  2. #ifdefined(CONFIG_S3C2400)

  3. #include

  4. #elif defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440)

  5. #include

  6. #endif

  7. #include

  8. 替换为

  9. #include

  10. b. 删除driver/usb/slave/interrupt.c

  11. c. 修改driver/usb/slave/Makefile中的 COBJS, 去掉interrupt.o

3.u-boot-2010.06-rc1中结构体都是小写,跟下载的代码中结构体名字是大写的,需要将大写的名字改成小写的,这样才可以编译过去.

  1. a.将usbin.c中

  2. L21

  3. /*

  4. extern S3C24X0_USB_DEVICE*usbdevregs;

  5. extern S3C24X0_DMAS*dmaregs;

  6. */

  7. extern struct s3c24x0_usb_device * usbdevregs;

  8. extern struct s3c24x0_dmas * dmaregs;

  9. L32解决: warning: suggest parentheses around arithmetic in operand of |


  10. #define SET_EP1_IN_PKT_READY() usbdevregs->EP0_CSR_IN_CSR1_REG= ((in_csr1 &(~ EPI_WR_BITS))

  11. | EPI_IN_PKT_READY )

  12. #define SET_EP1_SEND_STALL() usbdevregs->EP0_CSR_IN_CSR1_REG= ((in_csr1 & (~EPI_WR_BITS))

  13. | EPI_SEND_STALL) )

  14. #define CLR_EP1_SENT_STALL() usbdevregs->EP0_CSR_IN_CSR1_REG= ( (in_csr1 & (~EPI_WR_BITS))

  15. &(~EPI_SENT_STALL) )

  16. #define FLUSH_EP1_FIFO() usbdevregs->EP0_CSR_IN_CSR1_REG= ( (in_csr1 & (~EPI_WR_BITS))

  17. |(EPI_FIFO_FLUSH) )

  18. b.将usblib.c中

  19. L23

  20. /*

  21. extern S3C24X0_INTERRUPT*intregs;

  22. extern S3C24X0_USB_DEVICE*usbdevregs;

  23. extern S3C24X0_DMAS*dmaregs;

  24. */

  25. extern struct s3c24x0_interrupt * intregs;

  26. extern struct s3c24x0_usb_device *usbdevregs;

  27. extern struct s3c24x0_dmas * dmaregs;

  28. c.usbinit.c 中

  29. L22

  30. /*

  31. extern S3C24X0_INTERRUPT*intregs;

  32. S3C24X0_USB_DEVICE*usbdevregs;

  33. S3C24X0_DMAS*dmaregs;

  34. S3C24X0_CLOCK_POWER*clk_powerregs;

  35. S3C24X0_GPIO*gpioregs;

  36. */

  37. extern struct s3c24x0_interrupt * intregs;

  38. struct s3c24x0_usb_device * usbdevregs;

  39. struct s3c24x0_dmas * dmaregs;

  40. struct s3c24x0_clock_power * clk_powerregs;

  41. struct s3c24x0_gpio * gpioregs;

  42. L122:

  43. //gpioregs=S3C24X0_GetBase_GPIO();

  44. gpioregs = s3c24x0_get_base_gpio();

  45. L222

  46. /*

  47. clk_powerregs=S3C24X0_GetBase_CLOCK_POWER();

  48. usbdevregs=S3C24X0_GetBase_USB_DEVICE();

  49. dmaregs=S3C24X0_GetBase_DMAS();

  50. */

  51. clk_powerregs = s3c24x0_get_base_clock_power();

  52. usbdevregs = s3c24x0_get_base_usb_device();

  53. dmaregs = s3c24x0_get_base_dmas();


  54. L297

  55. //S3C24X0_INTERRUPT*intregs;

  56. struct s3c24x0_interrupt * intregs;


  57. //intregs=S3C24X0_GetBase_INTERRUPT();

  58. intregs = s3c24x0_get_base_interrupt();

  59. d.usbmain.c 中

  60. L20

  61. /*

  62. extern S3C24X0_USB_DEVICE*usbdevregs;

  63. extern S3C24X0_DMAS*dmaregs;

  64. */

  65. extern struct s3c24x0_usb_device * usbdevregs;

  66. extern struct s3c24x0_dmas * dmaregs;

  67. L444 解决: warning: suggest parentheses around arithmetic in operand of |


  68. 444 gpioregs->MISCCR =(gpioregs->MISCCR&~(7<<4))| (clock_sel<<4);

  69. 445 gpioregs->GPHCON =(gpioregs->GPHCON&~(3<<18))| (2<<18);

  70. e.usbout.c中

  71. L28

  72. /*

  73. extern S3C24X0_INTERRUPT*intregs;

  74. extern S3C24X0_USB_DEVICE*usbdevregs;

  75. extern S3C24X0_DMAS*dmaregs;

  76. */

  77. extern struct s3c24x0_interrupt * intregs;

  78. extern struct s3c24x0_usb_device * usbdevregs;

  79. extern struct s3c24x0_dmas * dmaregs;

  80. L188

  81. //ClearPending_my(BIT_DMA2);

  82. ClearPending(BIT_DMA2);

  83. f.usbsetup.c中

  84. L19

  85. /*

  86. extern S3C24X0_INTERRUPT*intregs;

  87. extern S3C24X0_USB_DEVICE*usbdevregs;

  88. extern S3C24X0_DMAS*dmaregs;

  89. */

  90. extern struct s3c24x0_interrupt * intregs;

  91. extern struct s3c24x0_usb_device * usbdevregs;

  92. extern struct s3c24x0_dmas * dmaregs;

  93. L46 解决: warning: suggest parentheses around arithmetic in operand of |


  94. #define CLR_EP0_OUT_PKT_RDY() usbdevregs->EP0_CSR_IN_CSR1_REG=((ep0_csr & (~EP0_WR_BITS))|

  95. EP0_SERVICED_OUT_PKT_RDY )

  96. #define CLR_EP0_OUTPKTRDY_DATAEND() usbdevregs->EP0_CSR_IN_CSR1_REG=( (ep0_csr & (~EP0_WR_BITS) )|

  97. (EP0_SERVICED_OUT_PKT_RDY|EP0_DATA_END) )


  98. #define SET_EP0_IN_PKT_RDY() usbdevregs->EP0_CSR_IN_CSR1_REG=( (ep0_csr & (~EP0_WR_BITS) ) |

  99. (EP0_IN_PKT_READY) )

  100. #define SET_EP0_INPKTRDY_DATAEND() usbdevregs->EP0_CSR_IN_CSR1_REG=( (ep0_csr & (~EP0_WR_BITS))|

  101. (EP0_IN_PKT_READY|EP0_DATA_END) )


  102. #define CLR_EP0_SETUP_END() usbdevregs->EP0_CSR_IN_CSR1_REG=( (ep0_csr & (~EP0_WR_BITS)) |

  103. (EP0_SERVICED_SETUP_END) )


  104. #define CLR_EP0_SENT_STALL() usbdevregs->EP0_CSR_IN_CSR1_REG=( (ep0_csr & (~EP0_WR_BITS) )&

  105. (~EP0_SENT_STALL) )


  106. #define FLUSH_EP0_FIFO() {while(usbdevregs->OUT_FIFO_CNT1_REG)usbdevregs->fifo[0].EP_FIFO_REG;}

4.arch/arm/include/asm/arch/s3c24x0.h中

  1. a.添加两个宏定义

  2. #define BIT_DMA2 (0x1<<19)

  3. #define BIT_USBD (0x1<<25)


  4. b.修改s3c24x0_usb_device结构体

  5. //u8 res10[7]

  6. u8 res10[3];

  7. //u8 res12[3]

  8. u8 res12[7];

  9. //u8 res13[7]

  10. u8 res13[3];

  11. /*

  12. struct s3c24x0_usb_dev_fifos fifo[5];

  13. struct s3c24x0_usb_dev_dmas dma[5];

  14. */

  15. u32 res17[8];

  16. struct s3c24x0_usb_dev_fifos fifo[5];

  17. u32 res18[11];

  18. struct s3c24x0_usb_dev_dmas ep1;

  19. struct s3c24x0_usb_dev_dmas ep2;

  20. u8 res19[16];

  21. struct s3c24x0_usb_dev_dmas ep3;

  22. struct s3c24x0_usb_dev_dmas ep4;


  23. c.修改 struct s3c24x0_gpio

  24. L481 添加:

  25. /*s3c2440*/

  26. u32 res9[4];

  27. u32 GPJCON;

  28. u32 GPJDAT;

  29. u32 GPJUP;

5.usbmain.c中void IsrUsbd(void)调用了ClearPending,其实现如下:

  1. arch/arm/cpu/arm920t/interrupt.c

  2. //添加 ClearPending的实现:

  3. void ClearPending(int bit)

  4. {

  5. intregs->SRCPND = bit;

  6. intregs->INTPND = bit;

  7. }

  8. 并修改driver/usb/slave/usbmain.c

  9. //ClearPending_my(BIT_USBD);

  10. ClearPending(BIT_USBD);

6. usbmain.c的usb_init_slave(void)调用了Isr_Init(),其实现如下

arch/arm/cpu/arm920t/interrupt.c中添加

  1. #include


  2. struct s3c24x0_interrupt*intregs;

  3. void(*isr_handle_array[50])(void);

  4. extern void IsrUsbd(void);

  5. extern void IsrDma2(void);

  6. void Dummy_isr(void)

  7. {

  8. printf("Dummy_isr error, interrupt number: %d, INTMSK = 0x%xn",intregs->INTOFFSET,intregs->INTMSK);

  9. while(1);

  10. }

  11. //初始化irq的中断向量表

  12. void Isr_Init(void)

  13. {

  14. inti=0;

  15. intregs=s3c24x0_get_base_interrupt();


  16. for(i=0;i

  17. {

  18. isr_handle_array[i]=Dummy_isr;

  19. }


  20. intregs->INTMOD=0x0;//All=IRQ mode

  21. intregs->INTMSK=BIT_ALLMSK;//All interruptismasked.


  22. #ifdef CONFIG_USB_DEVICE

  23. isr_handle_array[ISR_USBD_OFT]=IsrUsbd;

  24. isr_handle_array[ISR_DMA2_OFT] = IsrDma2;

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭