久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3535|回復: 0
打印 上一主題 下一主題
收起左側

CH376 U盤文件讀寫相關C語言代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:223521 發(fā)表于 2019-8-7 10:13 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
CH376 U盤文件讀寫相關C代碼,根據CH376原廠代碼整理,去掉了和C51相關的代碼。


源程序如下:
  1. /* CH376芯片 硬件標準SPI串行連接的硬件抽象層 V1.0 */
  2. /* 提供I/O接口子程序 */

  3. #include        "HAL.H"

  4. /* 本例中的硬件連接方式如下(實際應用電路可以參照修改下述定義及子程序) */
  5. /* 單片機的引腳    CH376芯片的引腳
  6.       P1.4                 SCS
  7.       P1.5                 SDI
  8.       P1.6                 SDO
  9.       P1.7                 SCK      */
  10. #define        CH376_SPI_SCS                        P14                /* 假定CH376的SCS引腳 */
  11. #define        CH376_SPI_SDO                        P16                /* 假定CH376的SDO引腳 */

  12. sfr                SPDR = 0x86;        /* SPI數據寄存器 */
  13. sfr                SPSR = 0xAA;        /* SPI狀態(tài)寄存器 */
  14. sfr                SPCR = 0xD5;    /* SPI控制寄存器 */
  15. #define        SPI_IF_TRANS        0x80        /* SPI字節(jié)傳輸完成標志,在SPSR的位7 */

  16. #define CH376_INT_WIRE                        INT0        /* 假定CH376的INT#引腳,如果未連接那么也可以通過查詢兼做中斷輸出的SDO引腳狀態(tài)實現 */

  17. void        CH376_PORT_INIT( void )  /* 由于使用SPI讀寫時序,所以進行初始化 */
  18. {
  19. /* 如果是硬件SPI接口,那么可使用mode3(CPOL=1&CPHA=1)或mode0(CPOL=0&CPHA=0),CH376在時鐘上升沿采樣輸入,下降沿輸出,數據位是高位在前 */
  20.         CH376_SPI_SCS = 1;  /* 禁止SPI片選 */
  21. /* 對于雙向I/O引腳模擬SPI接口,那么必須在此設置SPI_SCS,SPI_SCK,SPI_SDI為輸出方向,SPI_SDO為輸入方向 */
  22.         SPCR = 0x5C;  /* 設置SPI模式3, DORD=0(MSB first), CPOL=1, CPHA=1, CH376也支持SPI模式0 */
  23. }

  24. void        mDelay0_5uS( void )  /* 至少延時0.5uS,根據單片機主頻調整 */
  25. {
  26. }

  27. UINT8        Spi376Exchange( UINT8 d )  /* 硬件SPI輸出且輸入8個位數據 */
  28. {  /* 為了提高速度,可以將該子程序做成宏以減少子程序調用層次 */
  29.         SPDR = d;  /* 先將數據寫入SPI數據寄存器,然后查詢SPI狀態(tài)寄存器以等待SPI字節(jié)傳輸完成 */
  30.         while ( ( SPSR & SPI_IF_TRANS ) == 0 );  /* 查詢SPI狀態(tài)寄存器以等待SPI字節(jié)傳輸完成 */
  31.         SPSR &= ~ SPI_IF_TRANS;  /* 清除SPI字節(jié)傳輸完成標志,有的單片機會自動清除 */
  32.         return( SPDR );  /* 先查詢SPI狀態(tài)寄存器以等待SPI字節(jié)傳輸完成,然后從SPI數據寄存器讀出數據 */
  33. }

  34. #define        xEndCH376Cmd( )        { CH376_SPI_SCS = 1; }  /* SPI片選無效,結束CH376命令,僅用于SPI接口方式 */

  35. void        xWriteCH376Cmd( UINT8 mCmd )  /* 向CH376寫命令 */
  36. {
  37. #ifdef        CH376_SPI_BZ
  38.         UINT8        i;
  39. #endif
  40.         CH376_SPI_SCS = 1;  /* 防止之前未通過xEndCH376Cmd禁止SPI片選 */
  41. /* 對于雙向I/O引腳模擬SPI接口,那么必須確保已經設置SPI_SCS,SPI_SCK,SPI_SDI為輸出方向,SPI_SDO為輸入方向 */
  42.         CH376_SPI_SCS = 0;  /* SPI片選有效 */
  43.         Spi376Exchange( mCmd );  /* 發(fā)出命令碼 */
  44. #ifdef        CH376_SPI_BZ
  45.         for ( i = 30; i != 0 && CH376_SPI_BZ; -- i );  /* SPI忙狀態(tài)查詢,等待CH376不忙,或者下面一行的延時1.5uS代替 */
  46. #else
  47.         mDelay0_5uS( ); mDelay0_5uS( ); mDelay0_5uS( );  /* 延時1.5uS確保讀寫周期大于1.5uS,或者用上面一行的狀態(tài)查詢代替 */
  48. #endif
  49. }

  50. #ifdef        FOR_LOW_SPEED_MCU  /* 不需要延時 */
  51. #define        xWriteCH376Data( d )        { Spi376Exchange( d ); }  /* 向CH376寫數據 */
  52. #define        xReadCH376Data( )                ( Spi376Exchange( 0xFF ) )  /* 從CH376讀數據 */
  53. #else
  54. void        xWriteCH376Data( UINT8 mData )  /* 向CH376寫數據 */
  55. {
  56.         Spi376Exchange( mData );
  57. //        mDelay0_5uS( );  /* 確保讀寫周期大于0.6uS */
  58. }
  59. UINT8        xReadCH376Data( void )  /* 從CH376讀數據 */
  60. {
  61. //        mDelay0_5uS( );  /* 確保讀寫周期大于0.6uS */
  62.         return( Spi376Exchange( 0xFF ) );
  63. }
  64. #endif

  65. /* 查詢CH376中斷(INT#低電平) */
  66. UINT8        Query376Interrupt( void )
  67. {
  68. #ifdef        CH376_INT_WIRE
  69.         return( CH376_INT_WIRE ? FALSE : TRUE );  /* 如果連接了CH376的中斷引腳則直接查詢中斷引腳 */
  70. #else
  71.         return( CH376_SPI_SDO ? FALSE : TRUE );  /* 如果未連接CH376的中斷引腳則查詢兼做中斷輸出的SDO引腳狀態(tài) */
  72. #endif
  73. }

  74. UINT8        mInitCH376Host( void )  /* 初始化CH376 */
  75. {
  76.         UINT8        res;
  77.         CH376_PORT_INIT( );  /* 接口硬件初始化 */
  78.         xWriteCH376Cmd( CMD11_CHECK_EXIST );  /* 測試單片機與CH376之間的通訊接口 */
  79.         xWriteCH376Data( 0x65 );
  80.         res = xReadCH376Data( );
  81.         xEndCH376Cmd( );
  82.         if ( res != 0x9A ) return( ERR_USB_UNKNOWN );  /* 通訊接口不正常,可能原因有:接口連接異常,其它設備影響(片選不唯一),串口波特率,一直在復位,晶振不工作 */
  83.         xWriteCH376Cmd( CMD11_SET_USB_MODE );  /* 設備USB工作模式 */
  84.         xWriteCH376Data( 0x06 );
  85.         mDelayuS( 20 );
  86.         res = xReadCH376Data( );
  87.         xEndCH376Cmd( );
  88. #ifndef        CH376_INT_WIRE
  89. #ifdef        CH376_SPI_SDO
  90.         xWriteCH376Cmd( CMD20_SET_SDO_INT );  /* 設置SPI的SDO引腳的中斷方式 */
  91.         xWriteCH376Data( 0x16 );
  92.         xWriteCH376Data( 0x90 );  /* SDO引腳在SCS片選無效時兼做中斷請求輸出 */
  93.         xEndCH376Cmd( );
  94. #endif
  95. #endif
  96.         if ( res == CMD_RET_SUCCESS ) return( USB_INT_SUCCESS );
  97.         else return( ERR_USB_UNKNOWN );  /* 設置模式錯誤 */
  98. }
復制代碼

所有資料51hei提供下載:
CH376.rar (26.04 KB, 下載次數: 50)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩电影免费观看中文字幕 | 男女羞羞视频免费看 | 日韩一区二区在线观看视频 | 国产综合久久 | 国产玖玖 | 欧美韩一区二区 | 国产成人高清成人av片在线看 | 亚洲男人天堂2024 | 日韩视频一区二区三区 | 鸳鸯谱在线观看高清 | 成人在线观看欧美 | 一级亚洲| 免费在线国产视频 | www.天天操| 欧美成人a∨高清免费观看 欧美日韩中 | 男女网站免费 | 久久久精品一区 | 国产成人99久久亚洲综合精品 | 欧美精品综合在线 | 欧美mv日韩mv国产网站91进入 | 国产99小视频 | 黄色亚洲| 婷婷色国产偷v国产偷v小说 | 韩日视频在线观看 | 欧美精品一区二区三区在线 | 高清欧美性猛交 | 一级黄色片网站 | 激情婷婷成人 | 99精品在线 | 天天干干 | 日韩高清国产一区在线 | 日韩中文一区二区三区 | 亚洲成人在线视频播放 | 久久国产视频播放 | 国产亚韩 | 五月天综合影院 | 精品久久久久久一区二区 | 在线观看国产www | 国产福利视频 | 国产精品高潮呻吟久久 | 成人免费小视频 |