新闻中心

EEPW首页 > 模拟技术 > 设计应用 > 将串行应用移植到USB接口的简便方法(06-100)

将串行应用移植到USB接口的简便方法(06-100)

——
作者:Microchip Technology Inc. Lucio Di Jasio时间:2008-04-02来源:电子产品世界收藏
  便捷的固件移植

  在下面的讨论中,我们假设原先的端口代码是用C语言编写的,并且使用了可访问集成UART外设的公共C语言库。 给定这些条件后,将固件移植到CDC需要进行如下的修改:

本文引用地址:http://www.eepw.com.cn/article/81086.htm

  ·在主文件头部,用相应的声明代替针对端口的#include声明;

  ·在主函数中,增加对-CDC初始化代码的调用;

  ·在主函数中,增加对后台任务的调用;

  ·验证应用程序代码,以实现与USB后台任务的协同多任务处理;

  ·最后,为链接器提供USB-CDC专用库,生成最终的可执行代码,然后对闪存芯片进行编程。

  实际上,上述这种情况要求应用所调用的任何功能都不能包含阻塞循环。 也就是说,任何功能都不能占用100%的处理器时间,也不能妨碍USB后台任务的执行。 反过来,所有USB专用控制函数、中断、标志和缓冲机制都由CDC类固件后台任务管理,设计工程师无需关注其实现细节。 设计工程师所看到的只是一个非常类似于公共端口库的小函数集。表1给出了部分函数例子。

  大多数读者立即就可认出这些函数并将其与通用C语言库中的函数对应起来。 事实上,puts 和 gets 函数可以直接用CDC类中对应的 putsUSBUSART 和 getsUSBUSART 函数来替代。 通过其它专用实施函数还可以支持不同的串类型(空结束与固定长度缓冲)和存储类型(RAM还是ROM串表)。 下面给出熟悉的HelloWorld程序利用CDC-USB函数实现的程序。

  #include "systemusbusb.h"
  #include "io_cfg.h"

  void main(void)
  {
      InitializeSystem();
      while(1)
      {
          USBTasks();         // USB Tasks
          HelloWorld();       // send a message to the
              world
      }//end while
  }//end main
  HelloWorld(void)
  {   
     If ( mUSBUSARTIsTxTrfReady())                  // check if Tx buffer empty
         putrsUSBUSART( "Hello World!rn") //
            send a new text string
  } // Hello World



关键词: Microchip USB 串行

评论


相关推荐

技术专区

关闭