国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SOC系統(tǒng)經(jīng)典IP介紹以及使用方法說明之dw_i2c

這篇具有很好參考價值的文章主要介紹了SOC系統(tǒng)經(jīng)典IP介紹以及使用方法說明之dw_i2c。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

系列文章目錄


第三章 DW_i2c功能及使用流程介紹


文章目錄

前言

一、功能介紹

1.1 i2c寫操作:

1.1.1 詳細(xì)flow介紹

1.2 i2c讀操作:

1.2.1 詳細(xì)flow介紹

二、軟件流程介紹

2.1 定義WDT中斷服務(wù)子程序

2.2 定義main函數(shù)

三、總結(jié)



前言

? ? ?按照i2c的協(xié)議,i2c的時鐘由master方提供,master可以向slave發(fā)送數(shù)據(jù),也可以向slave請求數(shù)據(jù)。對應(yīng)的slave既可以接收來自master發(fā)送的數(shù)據(jù),也可以響應(yīng)master請求數(shù)據(jù)。關(guān)于i2c協(xié)議,后續(xù)我們會單獨(dú)講解里面的細(xì)節(jié)和注意事項(xiàng),這里我們主要接收使用過程中的一些基本配置flow。


一、功能介紹

? ? ? ?這里簡單介紹一下i2c讀寫過程涉及到flow:

1.1 i2c寫操作:

SOC系統(tǒng)經(jīng)典IP介紹以及使用方法說明之dw_i2c,數(shù)字設(shè)計(jì),匯編,c語言,人工智能,開發(fā)語言,青少年編程,嵌入式硬件,fpga開發(fā)

1.1.1 詳細(xì)flow介紹

step1:首先master發(fā)起i2c start,即在sclk高電平拉低sda;

step2:發(fā)送slave設(shè)備地址,與之通信,這個設(shè)備地址按照協(xié)議可以是7bit,也可以是10bit,這里介紹最簡單的7bit模式。

step3:緊接著發(fā)送一個bit的寫控制位,表示當(dāng)前傳輸為一筆寫操作。

step4:然后后續(xù)跟著兩個byte的數(shù)據(jù),這兩個byte數(shù)據(jù)一般用于軟件解析命令用,通常情況下收發(fā)雙方可以利用這兩個byte自定義一些私有協(xié)議,比如最簡單的就是兩個純粹的mem地址0x1000,表示master即將向0x1000地址寫數(shù)據(jù),因此后續(xù)master發(fā)送過來的Data,需要軟件將其搬運(yùn)到系統(tǒng)mem 0x1000地址去。當(dāng)然也可以將這兩個byte拆分成多個不同的命令,方便系統(tǒng)靈活運(yùn)用。

step5:然后是發(fā)送過來的真正的payload數(shù)據(jù)

step6:當(dāng)master完成數(shù)據(jù)寫傳輸后,發(fā)送stop,即在scl的高電平拉高sda,結(jié)束當(dāng)前傳輸。

1.2 i2c讀操作:

SOC系統(tǒng)經(jīng)典IP介紹以及使用方法說明之dw_i2c,數(shù)字設(shè)計(jì),匯編,c語言,人工智能,開發(fā)語言,青少年編程,嵌入式硬件,fpga開發(fā)

1.2.1 詳細(xì)flow介紹

step1:首先master發(fā)起i2c start,即在sclk高電平拉低sda;

step2:發(fā)送slave設(shè)備地址,與之通信,這個設(shè)備地址按照協(xié)議可以是7bit,也可以是10bit,這里介紹最簡單的7bit模式。

step3:緊接著發(fā)送一個bit的寫控制位,表示當(dāng)前傳輸為一筆寫操作。

step4:然后后續(xù)跟著兩個byte的數(shù)據(jù),這兩個byte數(shù)據(jù)一般用于軟件解析命令用,通常情況下收發(fā)雙方可以利用這兩個byte自定義一些私有協(xié)議,比如最簡單的就是兩個純粹的mem地址0x1000,表示master即將向0x1000地址寫數(shù)據(jù),因此后續(xù)master發(fā)送過來的Data,需要軟件將其搬運(yùn)到系統(tǒng)mem 0x1000地址去。當(dāng)然也可以將這兩個byte拆分成多個不同的命令,方便系統(tǒng)靈活運(yùn)用。

step5:這里master發(fā)送了一個re_start操作,即在scl的高電平拉低了sda,而并非發(fā)送payload數(shù)據(jù),這里其實(shí)是一個讀的轉(zhuǎn)身,當(dāng)slave接收到re_start時,會認(rèn)為master其實(shí)想讀數(shù)據(jù),訪問的數(shù)據(jù)地址體現(xiàn)在2byte信息里。因此,此時軟件需要從內(nèi)存地址里取數(shù)據(jù)并加載到i2c tx fifo中;

step6:按照協(xié)議重新發(fā)送設(shè)備地址以及R控制bit,這里配合step5供軟件解析讀過程。

step7:slave會根據(jù)軟件填寫的tx fifo值,把數(shù)據(jù)發(fā)送出去。

step8:當(dāng)master接收完數(shù)據(jù)后,發(fā)送stop,即在scl的高電平拉高sda,結(jié)束當(dāng)前傳輸。

二、軟件流程介紹

2.1 定義WDT中斷服務(wù)子程序

中斷handler定義:

int dw_i2c_int_handler()
{
   int rdata;
   rdata = REG32(I2C_INTR_STAT);  //read intr status
   //judge which intr bit trigger
   if((rdata & 0x1) == 0x1) //rx_under
     {
       rdata = REG32(I2C_CLR_RX_UNDER); //read clear
     }
   else if((rdata & 0x2) == 0x2) //rx_over
     {
       rdata = REG32(I2C_CLR_RX_OVER); //read clear
     }
   else if((rdata & 0x4) == 0x4) //rx_full
     {
       rdata = REG32(I2C_DATA_CMD); //read recv data
     }
   else if((rdata & 0x8) == 0x8) //tx_over
     {
       rdata = REG32(I2C_CLR_TX_OVER); //read clear
     }
   else if((rdata & 0x10) == 0x10) //tx_empty
     {
       REG32(I2C_DATA_CMD) = 0x12; //cpu initial data into tx fifo
     }
   else if((rdata & 0x20) == 0x20) //rd_req
     {
       REG32(I2C_CLR_RD_REQ); //clr stop
       REG32(I2C_DATA_CMD) = 0x12; //cpu initial data into tx fifo
     }
   else if((rdata & 0x40) == 0x40) //tx_abrt
     {
       rdata = REG32(I2C_CLR_TX_ABRT); //read clear
     }
   else if((rdata & 0x80) == 0x80) //rx_done
     {
       rdata = REG32(I2C_CLR_RX_DONE); //read clear
     }
   else if((rdata & 0x100) == 0x100) //activity
     {
       rdata = REG32(I2C_CLR_ACTIVITY); //read clear
     }
   else if((rdata & 0x200) == 0x200) //stop_det
     {
       REG32(I2C_CLR_STOP_DET); //clr stop
     }
}

? ? ?這里是一個通用的中斷handler,大家可以根據(jù)注釋以及datasheet上的描述對此進(jìn)行擴(kuò)展,比如有些軟件需要在tm_empty中斷發(fā)生的時候CPU填寫數(shù)據(jù),以及fifo full中斷的時候CPU需求將數(shù)據(jù)取走等等。具體還要根據(jù)實(shí)際應(yīng)用情況來做擴(kuò)展。

? ? 當(dāng)然,對于EDA驗(yàn)證來說,這里相對來說更靈活,可以根據(jù)驗(yàn)證環(huán)境情況來自定義中斷handler。

2.2 定義main函數(shù)

?main函數(shù)

int main()
{
   CLK_DW_I2C_EN;   //打開i2c模塊的時鐘使能,根據(jù)設(shè)計(jì)需求
   
   //may be i2c share gpio with module, this cfg can be used 
   GPIO_FUNC_SEL_I2C;  //配置gpio功能為DW_I2C

   set_irq_vector(NVIC_NUM_DW_I2C, (int)dw_i2c_int_handler); //配置中斷服務(wù)向量
   __nds32_enable_int(NVIC_NUM_DW_I2C); //使能CPU中斷

   //dw i2c initial
   REG32(I2C_ENABLE)      = 0x0;  //在配置i2c之前一定要先disable i2c_en
   REG32(I2C_SDA_HOLD)    = 0x5;  //可選,具體參考datasheet描述
   REG32(I2C_FS_SPKEN)    = 0x2;  //濾除毛刺的深度,建議根據(jù)需求配置
   REG32(I2C_TX_TL)       = 0x4;  //tx fifo水線
   REG32(I2C_RX_TL)       = 0x4;  /rx fifo水線
   REG32(I2C_CON)         = (REG32(I2C_CON) & 0xFFFFFF80) | 0x65); //master mode and 400k
   REG32(I2C_FS_SCL_HCNT) = 0x6;  //scl高電平寬度配置,根據(jù)需求修改
   REG32(I2C_FS_SCL_LCNT) = 0x6;  //scl低電平寬度配置,根據(jù)需求修改

   
   REG32(I2C_ENABLE) = 0x1; //使能i2c
   
   //填寫tx fifo數(shù)據(jù),硬件會自動將數(shù)據(jù)發(fā)送出去,這里填數(shù)據(jù)也可以放到int_handler中
   REG32(I2C_DATA_CMD) = 0x12;
   REG32(I2C_DATA_CMD) = 0x34;
   REG32(I2C_DATA_CMD) = 0x56;
   ......

   while(發(fā)送中斷完成);

}

? ? ?上述main函數(shù)中,本文詳細(xì)介紹了DW_i2c的初始化流程,里面的步驟基本上是必不可少的,當(dāng)然,有一些配置可以根據(jù)實(shí)際情況進(jìn)行調(diào)整,同時,如果使用i2c的更多功能,還需要大家自行添加相關(guān)寄存器配置。


三、總結(jié)

? ? ? 這里只是介紹了master發(fā)送的相關(guān)case配置,實(shí)際上DW_I2C可以配置為master/slave模式,且兩個模式可以分別支持收發(fā),即理論上來收還有其他三種case,master收數(shù)據(jù),slave發(fā)數(shù)據(jù)以及slave收數(shù)據(jù)。在實(shí)際設(shè)計(jì)case時,關(guān)于數(shù)據(jù)的收發(fā)可以靈活調(diào)整,借助每個中斷來進(jìn)行同步收發(fā)是一個比較好的編碼風(fēng)格。這里為了讓大家更容易理解,因此設(shè)計(jì)的case簡單化了。

? ? ? 在實(shí)際驗(yàn)證過程中,不僅僅要根據(jù)需求設(shè)計(jì)嚴(yán)謹(jǐn)?shù)腸ase,還要同時控制收發(fā)雙方的驅(qū)動程序,以及添加數(shù)據(jù)的自動化checker,這樣后期在大量回歸測試時,可以更快的完成回歸測試。文章來源地址http://www.zghlxwxcb.cn/news/detail-774271.html

到了這里,關(guān)于SOC系統(tǒng)經(jīng)典IP介紹以及使用方法說明之dw_i2c的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 使用電腦聯(lián)網(wǎng)時提示ip地址與其他系統(tǒng)有沖突的解決方法

    很多網(wǎng)友經(jīng)常在使用電腦聯(lián)網(wǎng)的時候,會看到這樣的提示“ip與其他系統(tǒng)沖突”,但是網(wǎng)友不知道如何解決該問題,最后沒有辦法選擇重裝系統(tǒng)。 其實(shí)只要我們留意一些細(xì)節(jié)并簡單的操作幾下就可以解決問題了。 工具 Windows OS 網(wǎng)絡(luò)服務(wù)支持 沖突的產(chǎn)生原因 1 IP地址相當(dāng)于是每

    2024年02月06日
    瀏覽(19)
  • vue中內(nèi)置指令v-model的作用和常見使用方法介紹以及在自定義組件上支持

    vue中內(nèi)置指令v-model的作用和常見使用方法介紹以及在自定義組件上支持

    一、v-model是什么 v-model是Vue框架的一種內(nèi)置的API指令,本質(zhì)是一種語法糖寫法,它負(fù)責(zé)監(jiān)聽用戶的輸入事件以更新數(shù)據(jù),并對一些極端場景進(jìn)行一些特殊處理。在Vue中,v-model是用于在表單元素和組件之間創(chuàng)建雙向數(shù)據(jù)綁定的指令。它可以簡化表單元素的綁定,使得在用戶輸入

    2024年01月19日
    瀏覽(21)
  • VMWARE虛擬機(jī)CentOS6.4系統(tǒng)使用主機(jī)無線網(wǎng)卡上網(wǎng)的三種方法介紹

    環(huán)境:WIN7旗艦版,臺式機(jī),U盤無線上網(wǎng)卡。 虛擬軟件:VMware9.0,虛擬系統(tǒng):CentOS6.4 需要實(shí)現(xiàn)虛擬機(jī)以獨(dú)立機(jī)形式工作和上網(wǎng)。 介紹一下VMware網(wǎng)絡(luò)設(shè)置的三種方式 1 Host-only連接方式 ? 讓虛機(jī)具有與宿主機(jī)不同的各自獨(dú)立IP地址,但與宿主機(jī)位于不同網(wǎng)段,同時為宿主主機(jī)新

    2024年02月06日
    瀏覽(23)
  • Win11使用動態(tài)磁貼還原經(jīng)典Win10開始菜單的方法

    Win11使用動態(tài)磁貼還原經(jīng)典Win10開始菜單的方法

    Win11系統(tǒng)界面與之前的Windows系統(tǒng)有很大的不同,任務(wù)欄采用居中式,開始菜單也居中了。很多用戶升級之后就覺得用得非常不習(xí)慣,想要將Win11開始菜單還原到Win10系統(tǒng)的樣子。那么下面就來看看Win11怎么使用動態(tài)磁貼還原經(jīng)典Win10開始菜單的教程。 具體操作步驟如下: 1、首

    2024年02月15日
    瀏覽(18)
  • vue前端實(shí)現(xiàn)將頁面顯示內(nèi)容生成pdf文件的幾種方法,html2canvas、dom-to-image、jspdf(帶分頁)基本使用以及介紹

    實(shí)際開發(fā)需求:vue項(xiàng)目中,根據(jù)數(shù)據(jù)結(jié)構(gòu)生成echarts圖表組件,生成帶有樣式的圖表以后,點(diǎn)擊下載按鈕,把圖表以pdf格式的文件下載到本地 實(shí)現(xiàn)思路:將vue界面的echarts組件生成圖片,然后使用插件將生成的圖片放入pdf中,再實(shí)現(xiàn)pdf文件的下載 涉及框架以及插件:vue、echar

    2024年01月25日
    瀏覽(29)
  • python 面向?qū)ο缶幊痰奶攸c(diǎn) - 封裝 - 繼承(經(jīng)典類、新式類) - 多態(tài) - 靜態(tài)方法、類方法 - 下劃線的使用 - 回合制攻擊游戲?qū)嶒?yàn)

    python 面向?qū)ο缶幊痰奶攸c(diǎn) - 封裝 - 繼承(經(jīng)典類、新式類) - 多態(tài) - 靜態(tài)方法、類方法 - 下劃線的使用 - 回合制攻擊游戲?qū)嶒?yàn)

    目錄 面向?qū)ο缶幊痰奶攸c(diǎn): 封裝:封裝是將數(shù)據(jù)和操作(方法)封裝在一個對象中的能力 繼承:繼承是指一個類(子類)可以繼承另一個類(父類)的屬性和方法。 我們?yōu)槭裁葱枰^承呢? 父類/基類 = ATM 子類/派生類= ChinaATM/ICBCATM ATM系統(tǒng)父類子類講解代碼: 經(jīng)典類和新式

    2024年02月15日
    瀏覽(23)
  • valgrind基本功能介紹、基礎(chǔ)使用方法說明 valgrind基本功能介紹、基礎(chǔ)使用方法說明

    valgrind基本功能介紹、基礎(chǔ)使用方法說明_valgrind使用方法_HNU Latecomer的博客-CSDN博客 拷貝效果不好,請看原文。 1、Valgrind概述 Valgrind是一套Linux下,開放源代碼(GPL V2)的仿真調(diào)試工具的集合。 Valgrind由內(nèi)核(core)以及基于內(nèi)核的其他調(diào)試工具組成。內(nèi)核類似于一個框架(f

    2024年02月07日
    瀏覽(22)
  • 代理ip的使用方法——Python爬蟲

    代理ip的使用方法——Python爬蟲

    本文內(nèi)容:代理ip使用原理,如何在自己的爬蟲里設(shè)置代理ip,如何知道代理ip有沒有生效,沒生效的話是哪里出了問題,個人使用的代理ip(付費(fèi))。 目錄 代理ip原理 ? ? ? 輸入網(wǎng)址后發(fā)生了什么呢? ? ? ? 代理ip做了什么呢? ? ? ? 為什么要用代理呢? ?爬蟲代碼中使用代

    2024年02月05日
    瀏覽(22)
  • Git的作用以及使用方法

    Git的作用以及使用方法

    GIT,全稱是分布式版本控制系統(tǒng),git通常在編程中會用到,并且git支持分布式部署。 可以有效、高速的處理從很小到非常大的項(xiàng)目版本管理。分布式相比于集中式的最大區(qū)別在于開發(fā)者可以提交到本地,每個開發(fā)者通過克隆(git clone),在本地機(jī)器上拷貝一個完整的Git倉庫。

    2023年04月25日
    瀏覽(21)
  • 【Java基礎(chǔ)篇】方法的使用(方法的使用以及形參實(shí)參的關(guān)系)

    【Java基礎(chǔ)篇】方法的使用(方法的使用以及形參實(shí)參的關(guān)系)

    作者簡介: 辭七七,目前大一,正在學(xué)習(xí)C/C++,Java,Python等 作者主頁: 七七的個人主頁 文章收錄專欄 :Java.SE,本專欄主要講解運(yùn)算符,程序邏輯控制,方法的使用,數(shù)組的使用,類和對象,繼承和多態(tài),抽象類和接口等內(nèi)容 歡迎大家點(diǎn)贊 ?? 收藏 ? 加關(guān)注哦!???? 方

    2024年02月08日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包