国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

基于uclinux的CAN總線嵌入式驅動編程

發布時間:2010-8-2 16:42    發布者:lavida
關鍵詞: CAN總線 , uclinux , 驅動編程
介紹了uclinux 操作系統的內核結構以及設備驅動編程的基本原理,并對CAN 總線嵌入式系統進行了硬件設計及軟件驅動編程,提出CAN 總線技術應用于嵌入式系統的一種方案。

1 引言

早期應用于八位單片機軟件設計的嵌入式系統主要為前后臺系統(或超循環系統),程序大約在幾千行以內,由兩部分組成,即其應用程序是一個無限的循環,循環中調用函數完成相應的操作,屬于后臺行為;其中斷服務程序處理異步事件,屬于前臺行為.隨著嵌入式系統功能越來越龐雜,如友好的人機界面、網絡化、遠程監控等.各種任務的優先級不同,傳統的設計方法無法完成,程序長達數萬行,程序員必須同繁瑣的底層硬件打交道,這樣效率低下.現代電子技術的發展為嵌入式微處理器提供了更多的外設,通用的如串口、并口、以太網口、現場總線、USB口等.基于免費自由軟件Linux發展而來的嵌入式系統uclinux,是一種免費的嵌入式操作系統.uclinux系統具有內核小、效率高、源碼開放、性能穩定、大量的開發工具、良好的開發環境等特點,并且各種應用程序豐富,是進行嵌入式系統開發的最優秀工具之一.  

2 uclinux操作系統簡介

uclinux 系統主要由用戶進程、系統調用接口、uclinux 內核、硬件控制器等四部分組成.用戶進程是用戶根據自己的設計和功能要求開發的應用程序,通過調用系統的功能函數來實現系統功能;系統調用接口通過系統調用實現用戶與系統內核的接口,這些調用和服務也可以看成是系統內核的一部分;uclinux 內核是操作系統的靈魂,它抽象了許多硬件細節,將所有的硬件抽象成統一的虛擬接口,使程序可以以一種統一的方式進行數據處理,它主要包括基于優先級的進程調度、內存管理、文件系統、網絡接口、進程間通訊等五部分;硬件控制器則包含了系統需要的所有可能的物理設備.以上四個部分之間的每個子系統都只能跟鄰近的系統進行通信。

uclinux 的設備管理系統是嵌入式操作系統的重要組成部分,它可以分為:下層、與設備相關的,即所謂的設備驅動程序,直接與相應的設備打交道,并向上提供一組訪問接口;以及上層、與設備無關,根據輸入輸出請求,通過特定設備驅動提供的接口,與設備進行通信.如通用的串口、網卡等驅動程序在uclinux 中都可以找到.  

3 uclinux驅動編程原理

uclinux嵌入式系統不能象Linux一樣動態加載驅動程序模塊,而只能同內核一起編譯,與應用程序、其他驅動程序一起固化到可擦寫的Flash上,驅動程序長駐內存,是靜態驅動程序.uclinux系統根據設備性質的不同,將設備分為四種類型:字符設備(char)、塊設備(block)、網絡接口( net )和其他設備驅動程序模塊.在下載的uclinux源代碼包中,可以在uclinux/linux/drivers目錄下面看到通用設備如char,block, net, cdrom, scsi, sound等.系統對于每個設備都對應一個主設備號和一個次設備號,不同的設備可以對應相同的主設備號,應用程序訪問設備通過不同的次設備號來識別和區別設備.在Linux系統/dev目錄下通過輸入ls -l命令可以查到系統已注冊的設備,因此編寫新的驅動程序時必須向系統注冊該設備.在uclinux系統中,通過register_chrdev函數實現注冊.

uclinux系統將所有硬件抽象成虛擬的文件系統,所有的字符設備、塊設備都支持文件操作接口,因此可以對這種虛擬的設備文件系統進行文件操作.通常對設備文件進行的操作有open、read、write、release等,即打開、讀、寫、釋放文件.每一個設備驅動程序實質上是用來完成特定任務的一組函數集. 驅動程序擁有一個稱為fileoperation 的數據結構,其中包含指向驅動程序內部大多數函數的指針.引導系統時,內核調用每一個驅動程序的初始化函數,將驅動程序的主設備號以及程序內部的函數地址結構的指針傳輸給內核.這樣,內核就能通過設備驅動程序的主設備號索引訪問驅動程序內部的子程序,完成打開、讀、寫等操作.程序員經常面臨的一項工作就是為系統的新設備編寫驅動程序.

在現代控制系統中,為了便于數據通訊,在底層常采用現場總線,目前CAN總線廣泛應用于過程工業、機械工業、紡織機械、農用機械、機器人、數控機床、醫療器械及傳感器等領域,下面介紹CAN總線應用于嵌入式系統的驅動編程.  

4 CAN 總線的性能特點

CAN(Controller Area Network)即控制器局域網絡.CAN 總線目前已形成國際標準 version2.0.該技術規范包括A 和B 兩部分.2.0A 給出了CAN 報文標準格式,而2.0B 給了出廠標準和擴展兩種格式.CAN 總線是應用最廣泛的現場總線之一,CAN為多主方式工作,網絡上任一節點均可在任意時刻主動地向網絡上其他節點發送信息,而不分主從,通信方式靈活,且無需站地址等節點信息;CAN 網絡上的節點信息分成不同的優先級,可滿足不同的實時要求;CAN 采用非破壞性總線仲裁技術,當多個節點同時向總線發送信息時,優先級較低的節點會主動地退出發送,而最高優先級的節點可不受影響地繼續傳輸數據;CAN 只需通過報文濾波即可實現點對點、一點對多點及全局廣播等幾種方式傳送接收數據,無需專門的“調度”,CAN 的直接通信距離最遠可達10km(速率5kbps 以下);通信速率最高可達1Mbps(此時通信距離最長為40m).CAN 上的節點數主要取決于總線驅動電路,目前可達110個;采用短幀結構,傳輸時間短,受干擾概率低,具有極好的檢錯效果;CAN 的通信介質可為雙絞線、同軸電纜或光纖等.CAN 總線的數據通信具有突出的可靠性、實時性和靈活性.  

5 CAN總線的嵌入式系統硬件設計

本設計選用Samsung公司的S3C4510B作為嵌入式系統的微處理器芯片,該處理器是16/32位RISC微處理控制器,內含由ARM公司設計的16/32位ARM7TDMI RISC處理器核,適用于價格及功耗敏感的場合.除內核外,該微處理器的片內外圍功能模塊包括:2個帶緩沖描述符的HDLC通道;2個UART通道;2個GDMA通道;2個32位定時器及可編程I/O口.CAN控制器選用philips公司的SJA1000,該芯片與PCA82C200電氣兼容,帶64字節先進先出(FIFO)堆棧,兼容協議CAN2.0B,支持11位和29位識別碼,位速率可達1Mbps,24MHZ時鐘頻率,芯片內含寄存器,可由用戶配置CAN總線波特率,設置驗收屏蔽標識碼,可配置系統為PeliCAN 模式或BasicCAN模式,出錯告警等.

該系統采用82C250作為收發器,其硬件連線如圖(1)所示.AD0"AD7與S3C4510B的p0"p7連線,/cs接p12,ALE接p13,/RD接p14,/wr接p15,/int接XINTREQ0.  

  
圖1 SJA1000硬件連線  

6 驅動軟件設計  



圖2 CAN總線初始化框圖  

本設計中,CAN總線驅動程序是作為一個模塊放在linux/deriver/char/文件夾里面,軟件流程如圖(2)所示,其設計詳細介紹如下.  
模塊首先對引用的庫函數進行申明,并且定義:

#define IOPMOD (*(volatile unsigned *)0x3ff5000)
#define IOPDATA (*(volatile unsigned *)0x3ff5008)
#define IOPCON (*(volatile unsigned *)0x3ff5004)
#define EXTDBWTH(*(volatile unsigned *)0x3ff5
#define SYSCFG(*(volatile unsigned *)0x

主要有以下幾個模塊:

void can_init(void)
{
SYSCFG =SYSCFG & 0x0fffffffd;
EXTDBWTH =EXTDBWTH& 0x00ff0ff;
IOPMOD=0xf0ff;
IOPDATA=0x6000; 寄存器地址0,MOD寄存器
IOPDATA= IO_PDATA&0xdfff; ALE=0 配置MOD寄存器
IOPDATA= IO_PDATA|0x3f; ; 復位模式、使能
IOPDATA=0x6006; ;寄存器地址6,總線定時器0寄存器
IOPDATA=IO_PDATA&0xdfff; ALE=0配置寄存器
IOPDATA= IO_PDATA|0x3f; 跳轉寬度、波特率設置
……;配置總線定時器1、驗收代碼寄存器等
IOPDATA=0x6000; SJA1000 寄存器地址0,MOD寄存器
IOPDATA=IO_PDATA&0xdfff; ALE=0配置MOD寄存器
IOPDATA= IO_PDATA&0xfe;寫復位位,進入工作模式
result = register_chrdev(254,"can",&can_fops);申請主設備號
if (resulti_rdev); 設備號
Int type = TYPE(inode->i_rdev); 設備類型
If (num>=scull_nr_devs) return -ENODEV;
dev = &scull_devices[num];
flip->private_data = dev;
MOD_INC_USE_COUNT; 用戶數人工計數
IOPCON=0x16; //xIRQ0
disable_irq(INT_can);
if(request_irq(INT_can, &can_rx,
SA_INTERRUPT, "can rx isr","can")) {
printk("s3c4510-can: Can't get irq %d\n",
INT_sja1000);
return -EAGAIN;
}
printk("can has get irq 0\n");
enable_irq(INT_can);
…… ; 配置SJA1000內部中斷及屏蔽寄存器
return 0;
}  

7 結束語

本文介紹了CAN總線在嵌入式系統中的驅動編程,對CAN總線技術在嵌入式系統中的應用進行了探索.本設計已在通信用逆變電源遠程監控系統中應用.
本文地址:http://www.qingdxww.cn/thread-18694-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點宏來節省時間和空間
  • Dev Tool Bits——使用DVRT協議查看項目中的數據
  • Dev Tool Bits——使用MPLAB® Data Visualizer進行功率監視
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本高清视频网址 | 九色视屏| 91国视频在线观看 | 欧美一区二区三区四区五区六区 | 成人国产三级在线播放 | 91香蕉在线 | 国内精品免费麻豆网站91麻豆 | 成人羞羞视频在线观看免费 | 免费一级做a爰片久久毛片潮 | 国产精品夫妻 | 久久国产一区二区 | 午夜日本一区二区三区 | 无限时间看片在线观看 | 精东影业精东影业果冻传媒 | 91五月天 | ww欧洲ww在线视频免费观看 | 最新色导航 | 国产高清视频网站 | 久久噜噜噜| 国产1页 | 亚洲视频综合 | 亚州视频在线 | 久久精品视频一区二区三区 | 亚洲天堂欧美 | 欧美黑人一区 | 热re99久久国产精品 | 快色在线观看免费播放高清 | 久久久久国产精品 | 性欧美高清精品videos | 一区二区三区免费观看 | 国产精品日韩欧美一区二区三区 | 欧美一区二区三区国产精品 | 欧美精品v欧洲精品 | 三级视频在线播放线观看 | 欧洲成人免费高清视频 | 欧美日韩三级在线 | 国产高清在线精品免费 | 成人日韩在线观看 | 欧美日韩另类在线 | 国产91情侣在线精品国产 | 欧美日韩精品一区二区在线播放 |