色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

英創信息技術ESM335x擴展總線中斷智能塊讀寫

英創信息技術 ? 來源:英創信息技術 ? 作者:英創信息技術 ? 2020-02-04 10:38 ? 次閱讀

1、綜述

ESM335x 嵌入式主板的提供帶中斷的精簡ISA擴展總線,主要用于支持高速數據采集、多路串口擴展以及其他的高級擴展應用。在這些應用中,往往出現需要按一定的順序讀寫一定量的數據的情況,如果用戶在應用程序中一次一次的調用讀寫操作將會很慢而且會占用較多系統資源。我們在Linux-4.1.6 ISA總線驅動增加了中斷時數據塊讀寫操作的功能,當有中斷發生時,驅動程序會按照用戶的設置讀寫塊數據,并將讀到的數據進行緩存,讀寫完之后驅動程序會通知應用程序,用戶在應用程序中通過讀操作就能獲得需要讀取的塊數據。使用驅動程序在中斷時自動讀寫能簡化用戶應用程序,減少塊讀寫操作的延遲。具體的使用方法在下面介紹。

2、數據結構及使用說明

使用發生中斷時驅動自動讀寫數據塊功能需要在應用程序中使用em335x_drivers.h頭文件,使能功能需要使用struct isa_transfer結構體,傳入此結構體數組給驅動以設置讀寫操作的參數

structisa_transfer

{

constvoid *tx_buf; /* 寫數據地址,不為NULL有效 */

void *rx_buf; /* 讀數據地址,不為NULL有效 */

unsigned len; /* 讀取長度 */

unsigned offset; /* 總線地址 0x00 .. 0xFF */

unsigned inc; /* 每次讀寫之后地址的增量 */

};

●tx_buf: 不為NULL時, 表示寫操作

●rx_buf: 不為NULL時,表示讀操作,數據讀取存放地址

●tx_buf和rx_buf不能同時有效

●len:讀寫長度,以字節byte為單位,進行塊讀寫操作時必須為偶數,也可以進行單獨的1個byte的數據讀寫,即設置為1

●offset:讀寫操作地址,塊數據讀寫時offset必須為偶數

●inc:每次讀寫操作后地址增加量,1或者0

總線塊數據讀寫說明

ESM335x精簡ISA總線只有8位數據/地址線,但是硬件內部可以進行16bit的讀寫,并且會自動將16bit的數據分為低8位和高8位兩次讀寫,低8位和高8位處在連續的地址處(即必須有兩個相鄰的地址),我們在驅動中為了加快讀寫操作,在用戶進行塊讀寫(結構體中的len為偶數)時會使用16bit讀寫的方式,具體讀寫方式如下,請用戶注意讀寫地址的變化:

●設置rx_buf有效,len=4, offset=0, inc=0時,驅動讀寫地址及順序為:

低8位—offset,高8位—offset+1;低8位—offset,高8位—offset+1。

●設置rx_buf有效,len=4, offset=0, inc=1時,驅動讀寫地址及順序為:

低8位—offset,高8位—offset+1;低8位—offset+2,高8位—offset+3。

寫操作相同。

3、應用程序示例

使用ISA總線需要先打開相應的設備文件:

intfd;

fd = open("/dev/em335x_isa", O_RDWR);

printf("open file = %d\n", fd);

if(fd < 0)

{

returnfd;

}

應用程序需要先初始化要傳遞給驅動的struct isa_transfer數組,讀寫順序和數組中的順序相同,用戶可自行設定,要使用中斷自動讀寫功能數組第一個元素必須初始化為0,否則將直接進行塊讀寫操作,而不使用中斷:

#defineARRAY_SIZE(a) (sizeof(a)) //用于計算數組字節數

uint8_t tx[2] = { 0x5a, 0x55}; //第一次寫入數據

uint8_t tx2[2] = { 0xaa, 0x1b}; //第二次寫入數據

uint8_t rx[8]; //讀取數據存放處

structisa_transfer tr[4];

//第一個元素必須設置為0才會使能中斷自動讀寫功能

memset ( &tr[0], 0,sizeof(structisa_transfer) );

//第一次操作設置為寫

tr[1].tx_buf = tx;

tr[1].rx_buf = NULL;

tr[1].len = ARRAY_SIZE(tx);

tr[1].offset = 0;

tr[1].inc = 1;

//第二次操作設置為讀,應用程序中讀操作存放數據地址rx,總線起始地址為offset

tr[2].tx_buf = NULL;

tr[2].rx_buf = rx;

tr[2].len = ARRAY_SIZE(rx) ;

tr[2].offset = 4;

tr[2].inc = 0;

//第三次操作設置為寫

tr[3].tx_buf = tx2;

tr[3].rx_buf = NULL;

tr[3].len = ARRAY_SIZE(tx2);

tr[3].offset = 0;

tr[3].inc = 1;

調用ioctl函數傳遞數組地址,使能中斷塊讀寫操作:

ret = ioctl(fd, ISA_IOC_MESSAGE(4), tr );

設置過后的讀取地址必須保證在下次調用ioctl重新設置之前一直有效,用戶之后調用read函數時驅動程序會自動將數據寫入設置的讀取地址(示例中的rx數組),而與用戶在read函數中輸入的地址無關,這樣能夠簡化用戶應用程序中的設置,用戶只需要在每次read函數之后到ioctl傳遞的結構體數組中的讀地址處(rx數組)獲得數據,并在下次讀操作之前進行拷貝或者其他操作以防止數據丟失。

停止中斷塊讀寫操作,只傳入一個全為0的struct isa_transfer機構體:

ret =ioctl(fd, ISA_IOC_MESSAGE(1), &tr[0] );

read函數讀取數據只需以sizeof(struct isa_transfer)為count參數,地址為無關參數,但是建議用戶傳入之前ioctl處的結構體數組地址,如下所示,之后數據便會讀到之前設置的結構體數組中指定的讀取數據存入地址處,即rx數組中:

nNum =read(fd, tr,sizeof(structisa_transfer));

需要重新設置讀寫數據參數時需要重新設置結構體數組,并重新調用ioctl函數。

設置完成后使用select函數查詢ISA總線狀態,如有中斷發生,并且驅動讀寫完了設置的數據塊,select函數將會返回大于0的數值,并且設置相應的讀文件標志,應用程序就可以調用read讀取數據了,select函數用法示例:

//線程函數中調用select函數查詢總線狀態,如可讀,則調用read讀取數據到之前設置的地址

intISASelectThreadFunc(void* lparam)

{

intfd = * (int*)lparam;

printf( "fd %d\n", fd );

fd_set fdRead;

structtimeval aTime;

intret;

while(1)

{

FD_ZERO(&fdRead);

FD_SET(fd,&fdRead);

aTime.tv_sec = 2;

aTime.tv_usec = 0;

ret = select ( fd+1, &fdRead, NULL, NULL, &aTime );

if( ret<0 )

printf( "select, something wrong!\n " );

if( ret>0 )

{

if( FD_ISSET(fd, &fdRead) )

{

printf( "There is a IRQ!!! AND RW complete!\n" );

/********************在此調用read************************/

read(fd, &tx[0],sizeof(structisa_transfer));

//數據已經讀到rx數組中了,用戶可在此進行數據處理

}

}

//判斷程序運行狀態,跳出循環

//break;

}

pthread_exit( NULL );

return0;

}

//創建線程

intStartPulseThread(int*fd )

{

pthread_attr_t attr;

pthread_t m_thread;

int res;

res = pthread_attr_init(&attr);

if( res!=0 )

{

printf("Create attribute failed\n" );

}

res = pthread_attr_setscope( &attr, PTHREAD_SCOPE_SYSTEM );

res += pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_DETACHED );

if( res!=0 )

{

printf( "Setting attribute failed\n" );

}

res = pthread_create( &m_thread, &attr, (void*(*) (void*))&ISASelectThreadFunc, fd );

if( res!=0 )

{

return-1;

}

pthread_attr_destroy( &attr );

return0;

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11342

    瀏覽量

    210153
  • 嵌入式主板
    +關注

    關注

    7

    文章

    6086

    瀏覽量

    35531
收藏 人收藏

    評論

    相關推薦

    龍芯中科榮獲2024年度信息技術應用創新工作委員會卓越貢獻成員單位

    近日,中國電子工業標準化技術協會信息技術應用創新工作委員會(以下簡稱“信工委會”)在北京召開2024年度工作總結座談會暨信“大比武”總結大會。中國工程院院士、信
    的頭像 發表于 01-23 10:50 ?117次閱讀

    芯盛智能榮獲2024年信息技術應用創新工作委員會卓越貢獻成員單位

    日前,中國電子工業標準化技術協會信息技術應用創新工作委員會(以下簡稱 “信工委會”)2024 年度總結座談會于北京隆重舉行。此次會議對在信工作中作出突出貢獻的成員單位予以表彰。江蘇
    的頭像 發表于 01-20 09:56 ?134次閱讀

    中科曙光南京研究院方案入選江蘇省信息技術創新優秀解決方案

    對中科曙光南京研究院在信息技術應用創新領域深厚實力的有力證明,更是對其持續推動技術創新、優化解決方案能力的廣泛認可。該方案集成了高端計算與分布式存儲的先進技術,旨在為用戶提供高效、穩定、可擴展
    的頭像 發表于 01-08 15:41 ?212次閱讀

    飛騰助力首屆教育信息技術應用創新大賽圓滿落幕

    近日,由中國教育技術協會主辦,教育部教育管理信息中心教育信實驗室、公安部第三研究所、中國電子工業標準化技術協會信工委會支持,北京航空航天
    的頭像 發表于 12-24 09:57 ?184次閱讀

    有方科技參編的信息技術團體標準發布

    近日,有方科技參編的《信息技術產品供應鏈成熟度 共性指標 第1部分:企業背景評價》《信息技術產品供應鏈成熟度 共性指標 第2部分:技術掌控評價》《信息技術產品供應鏈成熟度 共性指標 第
    的頭像 發表于 12-23 10:44 ?202次閱讀

    龍芯中科助力2024首屆教育信息技術應用創新大賽成功舉辦

    近日,2024首屆教育信息技術應用創新大賽在北京航空航天大學成功舉辦。本次大賽由中國教育技術協會主辦,教育信實驗室、公安部第三研究所、中國電子工業標準化技術協會信
    的頭像 發表于 12-19 17:02 ?273次閱讀

    AM335x和AMIC110 Sitara?處理器技術參考手冊

    電子發燒友網站提供《AM335x和AMIC110 Sitara?處理器技術參考手冊.pdf》資料免費下載
    發表于 11-14 15:07 ?1次下載
    AM<b class='flag-5'>335x</b>和AMIC110 Sitara?處理器<b class='flag-5'>技術</b>參考手冊

    中科達榮獲2024年軟件和信息技術服務優秀企業

    及前百家企業”名單。中科達憑借非凡的技術實力與持續的創新能力,成功入選“2024年度軟件和信息技術服務競爭力百強企業”以及“2024年軟件和信息技術服務優秀企業”。
    的頭像 發表于 10-30 11:44 ?541次閱讀

    AM335x功耗估算工具

    電子發燒友網站提供《AM335x功耗估算工具.pdf》資料免費下載
    發表于 10-12 11:46 ?0次下載
    AM<b class='flag-5'>335x</b>功耗估算工具

    引領智能未來:銳恩科技的國產低功耗單片機ENMCU

    在科技飛速發展的今天,低功耗單片機的應用越來越廣泛,尤其是在安防監控、智能家居和微波雷達照明等領域。作為國內專精特新國家高新技術半導體企業,銳恩科技致力于為客戶提供高性能、低功耗的單片機解決方案
    發表于 09-26 17:16

    AM335x硬件設計指南

    電子發燒友網站提供《AM335x硬件設計指南.pdf》資料免費下載
    發表于 09-19 11:05 ?0次下載
    AM<b class='flag-5'>335x</b>硬件設計指南

    AM335x原理圖核對表

    電子發燒友網站提供《AM335x原理圖核對表.pdf》資料免費下載
    發表于 09-19 11:03 ?0次下載
    AM<b class='flag-5'>335x</b>原理圖核對表

    can總線中斷狀態什么意思呢?

    CAN總線(Controller Area Network)是一種廣泛使用的現場總線通信協議,主要用于汽車、工業控制等領域。在CAN總線通信中,中斷狀態是一個重要的概念,它涉及到CAN
    的頭像 發表于 06-16 10:21 ?1886次閱讀

    STM32 SDIO讀寫SD卡,裸板運行單讀寫與多讀寫沖突怎么解決?

    STM32 SDIO讀寫SD卡問題裸板運行單讀寫與多讀寫沖突
    發表于 05-14 06:07

    龍芯中科三項信方案入圍工信部2023年信息技術應用創新應用示范案例名單

    近日,工業和信息化部通報了2023年信息技術應用創新解決方案征集遴選結果,本次共評選出典型解決方案173個、應用示范案例83個、單項創新案例64個。
    的頭像 發表于 03-07 16:45 ?998次閱讀
    龍芯中科三項信<b class='flag-5'>創</b>方案入圍工信部2023年<b class='flag-5'>信息技術</b>應用創新應用示范案例名單
    主站蜘蛛池模板: 成年人视频免费在线观看 | 嗯啊哈啊好棒用力插啊 | 99re2.久久热最新地址 | 国产午夜一区二区三区免费视频 | xxxxhdvideos动漫| 狠狠色丁香久久婷婷综合_中 | 老王午夜69精品影院 | 欧美人与禽ZOZO性伦交视频 | 亚洲免费中文 | 精品精品国产yyy5857香蕉 | 亚洲 日韩 色 图网站 | 亚洲成色WWW久久网站夜月 | 青青视频国产色偷偷 | 亚洲最大日夜无码中文字幕 | 美女久久久 | 久久这里只精品热在线99 | 扒开黑女人p大荫蒂老女人 扒开粉嫩的小缝末成年小美女 | 日本黄色www| 野花日本免费完整版高清版动漫 | 久久亚洲高清观看 | 国产三级在线免费 | 亚洲精品网址 | 秋霞三级理伦免费观看 | 青青草久久| 亚洲在线视频自拍精品 | 成人免费视频网站www | 久久婷婷色香五月综合激情 | 亚洲中文 字幕 国产 综合 | mm625亚洲人成电影网 | 久久日本精品在线热 | 岛国在线无码免费观 | 国精一区二区AV在线观看网站 | 草草色 | 古代又黄又肉到湿的爽文 | 亚洲 日韩 自拍 视频一区 | 国产传媒在线观看 | 宅男午夜大片又黄又爽大片 | 欧美一级久久久久久久久大 | 婷婷亚洲五月色综合久久 | 国产私拍福利精品视频 | 亚洲AV蜜桃永久无码精品无码网 |