FreescaleCAN模塊用戶手冊_第1頁
FreescaleCAN模塊用戶手冊_第2頁
FreescaleCAN模塊用戶手冊_第3頁
FreescaleCAN模塊用戶手冊_第4頁
FreescaleCAN模塊用戶手冊_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

CAN模塊用戶手冊引言FlexCAN(FC)模塊實(shí)現(xiàn)控制器局域網(wǎng)絡(luò)協(xié)議(CAN)通信。CAN是一種用于汽車和工業(yè)控制系統(tǒng)異步通訊協(xié)議,是高速(1Mbit/sec)、短時(shí)間間隔、基于優(yōu)先級的協(xié)議,能夠使用多種通訊媒介(例如:光纜,非屏蔽線對等)。FlexCAN模塊同時(shí)支持CAN協(xié)議規(guī)范2.0版、B部分所規(guī)定的標(biāo)準(zhǔn)幀和擴(kuò)展幀。CAN協(xié)議主要——但不是僅僅地用于車輛串行總線,面對這樣的特殊要求現(xiàn)場:實(shí)時(shí)處理、車輛電磁干擾環(huán)境的可靠操作、成本效率和需要的帶寬等。本文檔理論上采用CAN協(xié)議2.0版的一般應(yīng)用知識。更詳細(xì)的參見CAN協(xié)議規(guī)范2.0版。功能說明基于并包含所有現(xiàn)有的TouCAN模塊功能。IP接口結(jié)構(gòu)。完全實(shí)現(xiàn)CAN協(xié)議規(guī)范2.0標(biāo)準(zhǔn)數(shù)據(jù)和遠(yuǎn)程幀(直到109位長度)擴(kuò)展數(shù)據(jù)和遠(yuǎn)程幀(直到127位長度)0—8字節(jié)數(shù)據(jù)長度??删幊涛凰俾手钡?Mbit/sec。多達(dá)16個(gè)0—8字節(jié)長度的彈性信息緩存器,各自可以配置為接收或傳輸,所有的都支持標(biāo)準(zhǔn)幀和擴(kuò)展幀。允許單偵聽模式。內(nèi)容相關(guān)的尋址。無讀/寫信號。三個(gè)可編程過濾寄存器:全局過濾(用于MBs0-13)MB14專用MB15專用獨(dú)立于傳輸介質(zhì)(假設(shè)使用外部收發(fā)器)。開放的網(wǎng)絡(luò)架構(gòu)。多主總線。高度抗電磁干擾。高優(yōu)先級信息短延遲時(shí)間。低功耗睡眠模式,可編程總線活動(dòng)喚醒。結(jié)構(gòu)圖圖1:典型的CAN系統(tǒng)圖圖2每個(gè)CAN站點(diǎn)物理上通過一個(gè)收發(fā)器連接到CAN總線,收發(fā)器提供CAN總線上通訊所需的傳輸驅(qū)動(dòng)、波形,以及接受/比較等功能,還提供保護(hù)以預(yù)防不良的總線或站點(diǎn)對FlexCAN模塊造成損壞。信息緩存信息緩存器結(jié)構(gòu)。圖3說明擴(kuò)展(29-bit)ID信息緩存器結(jié)構(gòu);圖4說明標(biāo)準(zhǔn)(11-bit)ID信息緩存器結(jié)構(gòu)。圖3圖4擴(kuò)展和標(biāo)準(zhǔn)格式幀的公共字段。如表1:表1:公共字段字段描述TIMESTAMP時(shí)間戳。裝載CAN總線上本幀ID開始時(shí)捕捉的自由運(yùn)行定時(shí)器的高字節(jié)值的拷貝。CODE參見表2和表3LENGTH(接收時(shí))存儲在緩存器地址偏移量$3到$6中的接收到的數(shù)據(jù)長度。該字段由FlexCAN模塊填寫,拷貝自接收數(shù)據(jù)的DLC字段。萬一接收到的DLC字段的值超過8,則只有前8個(gè)接收到的數(shù)據(jù)字節(jié)被保存。LENGTH(發(fā)送時(shí))位于緩存器地址偏移量$3到$6中的待發(fā)送數(shù)據(jù)長度。該字段由器件填寫,用于作為DLC字段的值。如果遠(yuǎn)程傳送請求(RTR)=1,本幀作為遠(yuǎn)程幀,DATA字段不被傳輸,從而忽略LENGTH的值。DATA數(shù)據(jù)。本字段存儲幀數(shù)據(jù)直到8字節(jié)。對于接收幀,這些數(shù)據(jù)作為從總線上收到的數(shù)據(jù)存儲;對于發(fā)送幀,器件提供所需要發(fā)送的幀內(nèi)數(shù)據(jù)。Reserved保留字。該字的整個(gè)字段(16Bit)器件不能訪問。改字用于內(nèi)部測試,不允許以任何方式訪問。表2:接收緩存器編碼接收新幀前描述新幀收到后注釋0000NOTACTIVE:信息緩存未激活————0100EMPTY:信息緩存有效且是空的0010——0010FULL:信息緩存滿0110如果器件讀取發(fā)生在新幀到來之前,新接收碼是:00100110OVERRUN:在器件讀取第一個(gè)信息之前,第二個(gè)信息寫入填滿的緩存。0101*BUSY:信息緩沖正在被新接收的幀填寫。這種情形將在20周期內(nèi)清除。0010填寫了空緩存0011*0110填寫了滿緩存0111*0110填寫了已經(jīng)溢出的緩存*對于發(fā)送信息緩存,讀的時(shí)候應(yīng)忽略BUSY位。表3:發(fā)送緩存器編碼RTR初始值描述發(fā)送之后X1000信息緩存器沒有準(zhǔn)備好發(fā)送——01100數(shù)據(jù)幀無條件傳送一次。100011100遠(yuǎn)程幀傳送一次,并且信息緩沖器轉(zhuǎn)換成數(shù)據(jù)幀的接收信息緩存。010001010*數(shù)據(jù)幀僅作為遠(yuǎn)程幀的響應(yīng)傳送。101001110數(shù)據(jù)幀無條件傳送一次,然后僅作為遠(yuǎn)程幀的響應(yīng)。1010*當(dāng)檢測到匹配的遠(yuǎn)程請求幀,這樣的信息緩沖編碼變?yōu)?110。僅用于擴(kuò)展模式幀的字段。表4:擴(kuò)展幀字段描述ID[28:18]/[17:15]包含14個(gè)擴(kuò)展標(biāo)識的最高位,位于信息緩沖區(qū)的IDHIGH字。置換遠(yuǎn)程請求(SRR)包含一個(gè)確定的隱性位,僅用于擴(kuò)展模式,對于發(fā)送緩沖,需將此位置1,對于接收幀將按在總線上收到的來保存,該位位于信息緩沖區(qū)(MB)的IDHIGH字。如果FlexCAN模塊發(fā)送了一個(gè)值,并收到了匹配的響應(yīng),預(yù)示著一個(gè)成功的位傳送。無論如何,如果FlexCAN模塊以“1”來傳送此位,但卻收到它為“0”,預(yù)示著失去了仲裁;并且,如果FlexCAN模塊以“0”來傳送此位,但卻收到它為“1”,意味著發(fā)生了1個(gè)位錯(cuò)誤。ID擴(kuò)展(IDE)如果使用擴(kuò)展幀,該字段必須設(shè)置為“1”,如為“0”,將使用標(biāo)準(zhǔn)幀。該位位于信息緩沖區(qū)(MB)的IDHIGH字。ID[14:0]擴(kuò)展標(biāo)識符ID的位[14:0],位于信息緩沖區(qū)(MB)的IDLOW字。遠(yuǎn)程發(fā)送請求(RTR)該位是信息緩沖區(qū)(MB)的IDLOW字的最低位(LSB):0:數(shù)據(jù)幀;1:遠(yuǎn)程幀。僅用于標(biāo)準(zhǔn)模式幀的字段。表5:標(biāo)準(zhǔn)幀字段描述ID[28:18]包含位[28:18],位于信息緩沖區(qū)(MB)的IDHIGH字。該寄存器的四個(gè)最低位(LSBs)(對應(yīng)于擴(kuò)展幀的IDE位和ID[17:15]),必須全部寫為邏輯0,以確保FlexCAN模塊的正確操作,圖示于第4節(jié)。遠(yuǎn)程發(fā)送請求(RTR)該位是信息緩沖區(qū)(MB)的IDLOW字的最低位:0:數(shù)據(jù)幀;1:遠(yuǎn)程幀。如果FlexCAN模塊發(fā)送了一個(gè)值,并收到了匹配的響應(yīng),預(yù)示著一個(gè)成功的位傳送。無論如何,如果FlexCAN模塊以“1”來傳送此位,但卻收到它為“0”,預(yù)示著失去了仲裁;并且,如果FlexCAN模塊以“0”來傳送此位,但卻收到它為“1”,意味著發(fā)生了1個(gè)位錯(cuò)誤。16-BitTimeStamp16位時(shí)間戳,位于信息緩沖(MB)的IDLOW字,標(biāo)準(zhǔn)幀是不需要的。在標(biāo)準(zhǔn)信息緩存中,它用于保存自由運(yùn)行定時(shí)器的16位值,該定時(shí)器值是ID字段開始在CAN總線上傳輸時(shí)捕捉的。功能概述FlexCAN模塊是彈性的,允許它的16個(gè)信息緩存(MBs)中的各個(gè)分配為傳輸緩沖或接收緩沖,各MB也可以分配中斷標(biāo)志位,指示傳輸或接收成功完成。注:對于所有的過程,準(zhǔn)備MB的第一個(gè)動(dòng)作應(yīng)當(dāng)是通過將它的CODE字段設(shè)為適當(dāng)?shù)闹祵⑵渥兂煞腔顒?dòng)狀態(tài)。這個(gè)要求是強(qiáng)制性的,以確保正確的操作。發(fā)送過程器件通過執(zhí)行以下的步驟準(zhǔn)備或轉(zhuǎn)換為發(fā)送MB:寫控制/狀態(tài)字(Control/Statusword)保持發(fā)送MB處于非活動(dòng)狀態(tài)(CODE=1000);寫入ID_HIGH和ID_LOW字;寫入數(shù)據(jù)字節(jié);寫控制/狀態(tài)字(Control/Statusword)(激活碼CODE,LENGTH)注:第一和最后一步是強(qiáng)制性的。從最后一步開始,該MB將參加內(nèi)部仲裁過程,該過程發(fā)生在每次接收,或幀間時(shí)隙,檢測到CAN總線空閑以及至少一個(gè)MB準(zhǔn)備發(fā)送。內(nèi)部仲裁旨在選擇下一個(gè)發(fā)送的MB。當(dāng)該過程結(jié)束傳輸仲裁勝出的MB幀將傳送至串行信息緩存(SMB,參見節(jié))以發(fā)送(傳出)。發(fā)送過程中,F(xiàn)lexCAN模塊傳輸多達(dá)8字節(jié)的DATA字段,即使LENGTH字段得值更大。(當(dāng)LENGTH>8,傳輸?shù)膸蠨LC=8)在成功傳輸結(jié)束后:自由運(yùn)行定時(shí)器的值(ID字段開始在CAN總線上傳輸時(shí)捕捉的)寫入MB的TIME_STAMP字段。MB控制/狀態(tài)字(Control/Statusword)中的CODE字段更新。中斷標(biāo)志寄存器的某狀態(tài)標(biāo)志置位(FCIFLAG1,8.12節(jié))。傳輸中斷。如果對應(yīng)的FCIMASK1位置位,每個(gè)MB都可以成為中斷源。對于特定的MB,接收和發(fā)送中斷并沒有區(qū)別。更多關(guān)于FCIMASK1和中斷的信息參見第8.11、8.12和第9節(jié)。傳輸輪詢。如果使用軟件輪詢來發(fā)送,必須讀FCIFLAG1寄存器來確定發(fā)送狀態(tài)。警告:不要通過讀MB的控制狀態(tài)字來確定發(fā)送狀態(tài),因?yàn)檫@個(gè)程序?qū)?dǎo)致此MB鎖定。更多信息參見8.12節(jié)FCIFLAG1寄存器。接收過程。器件通過執(zhí)行以下的步驟準(zhǔn)備或轉(zhuǎn)換為接收MB:寫MB的控制/狀態(tài)字(Control/Statusword)保持接收寄存器為非活動(dòng)狀態(tài)(CODE=0000);寫入ID_HIGH和ID_LOW字;寫控制/狀態(tài)字(Control/Statusword)指明該MB為活動(dòng)的和空的(CODE=0100)。注:第一步和最后一步是強(qiáng)制性的。從最后一步開始,該MB是一個(gè)活動(dòng)的接收緩沖器,并參加內(nèi)部的匹配過程,發(fā)生在每次收到無誤的幀。在此過程中,所有的活動(dòng)的接收寄存器將自己的ID與更新的接收的ID相比較,如果發(fā)生了匹配事件,該幀將傳送(移進(jìn))至第一個(gè)(最低入口)匹配的MB。自由運(yùn)行定時(shí)器的值(捕捉于IDENTIFIER字段開始在CAN總線上傳輸時(shí)的時(shí)刻),寫入MB的TIME_STAMP字段。ID字段、DATA字段(最多8字節(jié))、以及LENGTH接著被存入,CODE字段被更新,以及,中斷標(biāo)志寄存器(FCIFLAG1)中的一個(gè)BUFnnI標(biāo)志置位。器件應(yīng)當(dāng)按照以下的方法從MB中讀取接收的幀:控制/狀態(tài)字(Control/Statusword)(必須的,激活本緩存的內(nèi)部鎖定);ID(可選——僅當(dāng)使用屏蔽時(shí)才是必要地);DATA字段的字;自由運(yùn)行定時(shí)器(釋放內(nèi)部鎖定——可選)。對于自由運(yùn)行定時(shí)器的讀取不是必須的,如果沒有執(zhí)行,該MB將保持鎖定,除非器件開始了讀取另一個(gè)MB的過程。注:在任何時(shí)刻僅有單個(gè)MB是鎖定的。唯一必須的器件操作是讀控制/狀態(tài)字(Control/Statusword),以確保數(shù)據(jù)的一致性。如果BUSY位置位,器件需要推遲操作直到此位清零。注:接收到的IDENTIFIER字段總是存儲在匹配的MB中,因此MB中ID字段的內(nèi)容可能由MASK導(dǎo)致改變。注:如果數(shù)據(jù)字節(jié)數(shù)是奇數(shù)(如LENGTH字段指示),則最后一字節(jié)將被重復(fù)以填充16位的字。接受的全部數(shù)據(jù)字段在移進(jìn)時(shí)寫入,故此如果接受的字節(jié)數(shù)少于8,未使用的字節(jié)不會保持它們以前的值。接收中斷。如果對應(yīng)的FCIMASK1位置位,每個(gè)MB都可以成為中斷源。對于特定的MB,接收和發(fā)送中斷并沒有區(qū)別。更多關(guān)于FCIMASK1和中斷的信息參見第8.11、8.12和第9節(jié)。接收輪詢。如果使用軟件來進(jìn)行接收輪詢,必須讀FCIFLAG1寄存器來確定發(fā)送狀態(tài)。警告:不要通過讀MB的控制狀態(tài)字來確定接收狀態(tài),因?yàn)檫@個(gè)過程將導(dǎo)致此MB鎖定。更多信息參見8.12節(jié)FCIFLAG1寄存器。自接收的幀。如果匹配的接收MB存在,F(xiàn)lexCAN模塊收到自己發(fā)送的幀。信息緩沖管理。為維護(hù)數(shù)據(jù)的一致性和正確的FlexCAN操作,器件必須遵從6.1和3.2節(jié)所列的規(guī)則。解除MB活動(dòng)是一個(gè)核心動(dòng)作,導(dǎo)致MB拒絕來自FlexCAN的發(fā)送和接收過程。任何對MB結(jié)構(gòu)的控制/狀態(tài)字(Control/Statusword)的寫訪問會解除MB活動(dòng),該過程使其排斥收/發(fā)進(jìn)程。任何形式的FlexCAN模塊內(nèi)部的MB訪問(不同于6.1和6.2節(jié)指明的)將導(dǎo)致FlexCAN模塊不可預(yù)知的行為。匹配/仲裁過程僅在一個(gè)周期期間由FlexCAN模塊來完成。一旦確定了勝出或匹配,就沒有任何的重新評估動(dòng)作,以保證接收幀不會丟失。如果在FlexCAN掃描第二個(gè)之后解除了匹配的MB的活動(dòng),則兩個(gè)或更多的接收MB對接收幀持有匹配的ID也不能確保接收。假設(shè)MB0和MB1被設(shè)置為接收匹配同一個(gè)ID的幀,最低號數(shù)的MB(MB0)對接收信息具有優(yōu)先權(quán),如果收到了匹配的ID,將移入MB0。但如果MB0被鎖定,信息將逗留在串行信息緩沖區(qū)(SMB),如節(jié)討論的那樣,如果MB0在第1次掃描MB1后被解除活動(dòng),則移動(dòng)操作不能確保。在掃描過程中,F(xiàn)lexCAN模塊將讀取每個(gè)MB的控制/狀態(tài)字(Control/Statusword),并搜索活動(dòng)接收碼,如果ID_HIGH字顯示該MB配置為接收擴(kuò)展幀,F(xiàn)lexCAN模塊將檢查ID_LOW,否則它將訪問下一個(gè)控制/狀態(tài)字。這次FlexCAN將在掃描MB0后找到一次匹配,但它并不就此退出掃描,因?yàn)镸B0被鎖定,它將去向MB1。它也將發(fā)現(xiàn)MB1活動(dòng)并且與ID匹配,但優(yōu)先級較低,從而數(shù)據(jù)沒有被存儲。因此如果在掃描MB1后故意解除MB0的活動(dòng),在掃描過程的最后,F(xiàn)lexCAN將找不到數(shù)據(jù)移入的有效MB。串行信息緩存(SMBs)為了對信息進(jìn)行雙重緩沖,F(xiàn)lexCAN模塊有兩個(gè)影子緩存,稱為串行信息緩存(SMBs)。這兩個(gè)緩存由FlexCAN模塊用來保存接收和發(fā)送的兩個(gè)信息。在同一時(shí)刻,僅有一個(gè)SMB是活動(dòng)的,其功能取決于FlexCAN模塊在那一時(shí)刻的操作。這兩個(gè)緩沖的任何一個(gè)在任何時(shí)間都是不可訪問的或不可見的。解除發(fā)送信息緩沖的活動(dòng)。當(dāng)選擇一個(gè)MB來發(fā)送時(shí),對其控制/狀態(tài)字(Control/Statusword)的任何寫訪問都將立即解除其活動(dòng),從而從發(fā)送進(jìn)程中移除。如果一個(gè)信息開始從發(fā)送緩沖移入SMB時(shí)該MB被解除活動(dòng),本條信息將不會發(fā)送。如果一個(gè)信息從發(fā)送緩沖移入SMB之后該MB被解除活動(dòng),信息會被發(fā)送,但不會產(chǎn)生中斷,TXCODE也不會更新。如果一條擁有最低優(yōu)先級的信息正在內(nèi)部接受發(fā)送仲裁,其MB被解除活動(dòng),則信息不被發(fā)出。解除接收信息緩沖的活動(dòng)。當(dāng)選擇一個(gè)MB來接收時(shí),對其控制/狀態(tài)字(Control/Statusword)的任何寫訪問都將立即解除其活動(dòng),從而從接收進(jìn)程中移除。如果一個(gè)信息開始移入時(shí)該MB被解除活動(dòng),傳輸將被終止并且不會申告中斷。如果發(fā)生了這樣的情況,接收MB中可能保存著兩個(gè)不同幀的混合數(shù)據(jù)。警告:絕對不要把數(shù)據(jù)寫入接收MB。如果信息正從SMB傳入時(shí)這樣做,控制/狀態(tài)字表現(xiàn)為填滿(FULL)或溢出(OVERRUN)的情形,但不請求中斷。這個(gè)動(dòng)作絕對禁止!鎖定/釋放/忙碌機(jī)構(gòu)以及SMB的用法。該機(jī)構(gòu)的執(zhí)行用于在接收和發(fā)送兩個(gè)進(jìn)程中確保數(shù)據(jù)的一致性。該機(jī)構(gòu)包含F(xiàn)lexCAN模塊內(nèi)部的一個(gè)MB和兩個(gè)SMB的緩沖幀傳輸?shù)逆i定狀態(tài)(LockStatus)。器件讀取MB的控制/狀態(tài)字(Control/Statusword)時(shí)觸發(fā)該MB的鎖定,也就是說一個(gè)新的與該MB匹配的接收幀不能寫入該MB。為了釋放一個(gè)鎖定的MB,器件可以通過讀取控制/狀態(tài)字的方式鎖定另一個(gè)MB,或者通過讀取自由運(yùn)行定時(shí)器全局釋放所有的鎖定MB。若一個(gè)MB被鎖定時(shí),收到了匹配的接收幀,則此幀不能存入該MB,保留在SMB中,這種情形沒有指示。若一個(gè)MB被鎖定時(shí),收到了兩個(gè)或更多的匹配接收幀,則最后收到的一個(gè)保留在SMB中,同時(shí)先期接收的丟失,這種情形沒有指示。如果鎖定的MB釋放,SMB中又存在有匹配的幀,則該幀傳送到匹配的MB。如果器件在SMB正在向接收MB傳輸時(shí)讀取該MB,控制/狀態(tài)字的BUSYCODE位置位,為保證數(shù)據(jù)的一致性,器件需要等到該位清零,這時(shí)該MB沒有鎖定,才能進(jìn)一步讀取。如果器件解除一個(gè)鎖定MB的活動(dòng),其鎖定狀態(tài)清除,但沒有數(shù)據(jù)傳入該MB。遠(yuǎn)程幀。遠(yuǎn)程幀是發(fā)送去請求數(shù)據(jù)幀的信息幀。FlexCAN模塊能夠配置為自動(dòng)發(fā)送數(shù)據(jù)幀來響應(yīng)遠(yuǎn)程幀,或者發(fā)送遠(yuǎn)程幀然后等待接收應(yīng)答的數(shù)據(jù)幀。當(dāng)發(fā)送一個(gè)遠(yuǎn)程幀:初始化一個(gè)MB作為發(fā)送MB,并將遠(yuǎn)程發(fā)送請求(RTR)位置1。一旦此遠(yuǎn)程幀被成功發(fā)送,該發(fā)送MB自動(dòng)成為帶有同樣ID的接收MB。當(dāng)FlexCAN模塊接收到一個(gè)遠(yuǎn)程幀:遠(yuǎn)程幀ID與所有CODE字段編程為1010的發(fā)送MB的ID進(jìn)行比較;如果有一個(gè)ID精確匹配的MB,其中的數(shù)據(jù)幀被發(fā)送;如果匹配的發(fā)送MB中的RTR位置位,F(xiàn)lexCAN模塊傳輸一個(gè)遠(yuǎn)程幀作為響應(yīng)。接收的遠(yuǎn)程幀并不存放在接收MB中,它僅僅用于觸發(fā)自動(dòng)應(yīng)答。屏蔽寄存器不用于遠(yuǎn)程幀ID的匹配。新來接收幀的所有ID位(除RTR)必須匹配遠(yuǎn)程幀,以觸發(fā)應(yīng)答發(fā)送。在遠(yuǎn)程幀已收到并匹配發(fā)送MB的情況下,該MB立即進(jìn)入內(nèi)部仲裁進(jìn)程,但僅僅作為一個(gè)沒有高優(yōu)先級的普通發(fā)送MB。過載幀。除非CAN總線上檢測到特定的條件,過載幀不由FlexCAN模塊發(fā)起,這些條件包括:在間隔的第1或第2位檢測到一個(gè)顯性位;在接收幀的幀結(jié)束(EOF)字段的第7(最后)位檢測到顯性位。在錯(cuò)誤幀或過載幀定界符的第8位(最后)檢測到顯性位。時(shí)間戳。這個(gè)數(shù)值采樣于ID字段開始在CAN總線上時(shí)的16位自由運(yùn)行定時(shí)計(jì)數(shù)器。對于接收到的信息,時(shí)間戳在信息寫入緩沖的時(shí)刻存儲到接收MB的TIME_STAMP字段。對于發(fā)送幀,一旦發(fā)送正確完成,TIME_STAMP字段會被寫入發(fā)送MB。】自由運(yùn)行定時(shí)器可以在一條信息接收進(jìn)MB0時(shí)復(fù)位。這項(xiàng)功能允許實(shí)現(xiàn)網(wǎng)絡(luò)時(shí)間同步。參見8.21節(jié)中FCCTL0寄存器的TSYNC位。單偵聽模式。單偵聽模式下,F(xiàn)lexCAN模塊能夠接收另一個(gè)站點(diǎn)的接收信息應(yīng)答。無論何時(shí)模塊進(jìn)入該模式后,錯(cuò)誤計(jì)數(shù)器凍結(jié),F(xiàn)lexCAN模塊在錯(cuò)誤被動(dòng)模式下運(yùn)行。錯(cuò)誤和狀態(tài)寄存器的故障限制位指示被動(dòng)錯(cuò)誤,而不考慮錯(cuò)誤計(jì)數(shù)器的值。因?yàn)樵撃J较?,模塊不影響CAN總線,器件能夠履行監(jiān)視器的功能,或者自動(dòng)位速率測試。不論如何,F(xiàn)lexCAN將僅僅監(jiān)視有效的傳輸而不會導(dǎo)致錯(cuò)誤。這要求總線上的另一個(gè)CAN模塊提供應(yīng)答(ACK)位以完成傳送。一旦設(shè)定到這種模式,F(xiàn)lexCAN模塊等待進(jìn)入傳輸間隔、被動(dòng)錯(cuò)誤、總線關(guān)閉或空閑狀態(tài)。在等待周期內(nèi),F(xiàn)lexCAN模塊等待進(jìn)入此模式之前的所有內(nèi)部活動(dòng)的完成,不同于作為CAN總線接口的行為。位定時(shí)。FlexCAN模塊支持以多種方式設(shè)置CAN協(xié)議要求的位定時(shí)參數(shù)。有兩個(gè)16為寄存器(FCCTL0和FCCTL1)來確定位定時(shí)參數(shù)各個(gè)字段的值。傳播段(PROPSEG),1/2相位段(PSEG1andPSEG2),以及同步跳躍寬度(RJW)都通過FCCTL0和FCCTL1寄存器來編程,參見8.2和8.3節(jié)。同樣,F(xiàn)lexCAN維護(hù)一個(gè)預(yù)分頻(PRES_DIV)值,以確定系統(tǒng)時(shí)鐘和SCLOCK、當(dāng)前時(shí)間元之間的比率。表6:SystemClock/CANBit-Rate/S-Clock舉例系統(tǒng)時(shí)鐘頻率(Mhz)Can位速率(Mhz)允許的S-Clock頻率(Mhz)允許的時(shí)間元/位數(shù)量預(yù)分頻器編程值+1注釋60120,15,12,1020,15,12,103,4,5,6最少8個(gè)、最多25個(gè)元時(shí)間56114,814,84,754118,918,93,650125,1025,102,5600.1253,2.5,2,1.875,1.5,1.25,124,20,16,15,12,10,820,24,30,3240,48,60配置FlexCAN模塊位定時(shí)。位定時(shí)的詳細(xì)內(nèi)容參考CAN通訊協(xié)議2.0規(guī)范。編程位定時(shí)功能時(shí)必須注意以下的考慮:如果編程后的PRES_DIV值導(dǎo)致每時(shí)間元一個(gè)系統(tǒng)時(shí)鐘,F(xiàn)CCTL1寄存器的PSEG2字段必須編程為0。如果編程后的PRES_DIV值導(dǎo)致每時(shí)間元一個(gè)系統(tǒng)時(shí)鐘,信息處理時(shí)間(IPT)等于3個(gè)時(shí)間元,要不它等于兩個(gè)時(shí)間元。如果PSEG2=2,F(xiàn)lexCAN模塊傳輸時(shí)相對于同步段推遲一個(gè)時(shí)間元。如果遇到下面兩個(gè)條件,相對發(fā)送更早的幀起始SOF信號的節(jié)點(diǎn),F(xiàn)lexCAN模塊可能不能夠及時(shí)準(zhǔn)備一個(gè)MB來開始自身的發(fā)送與仲裁。當(dāng)預(yù)分頻器和位定時(shí)控制字段編程到某個(gè)值,導(dǎo)致一個(gè)CAN位時(shí)間小于十個(gè)系統(tǒng)時(shí)鐘周期,并且,CAN總線負(fù)載率為100%,任何時(shí)候其它節(jié)點(diǎn)的幀起始(SOF)符號上升沿的發(fā)送發(fā)生在信息間隔的三位期間;FlexCAN模塊位時(shí)間必須編程為大于或等于9個(gè)系統(tǒng)時(shí)鐘,否則不能保證正確操作。FlexCAN初始化/復(fù)位順序。FlexCAN模塊按兩種方法復(fù)位:使用系統(tǒng)復(fù)位線硬件復(fù)位在FCMCR中聲明SOFT_RST軟復(fù)位下面是復(fù)位的反面,F(xiàn)lexCAN模塊不與CAN總線同步,F(xiàn)CMCR寄存器的HALT和FRZ1位置位。其主要控制禁止,F(xiàn)CMCR的FREEZ_ACK和NOT_RDY位置位,F(xiàn)lexCAN模塊的CANTX引腳處于隱性狀態(tài),不發(fā)起幀發(fā)送,也不從CAN總線上接收任何幀。SOFT_RESET或硬件復(fù)位后,MB的內(nèi)容不作改變。通過FCMCR寄存器申告HALT位或復(fù)位改變或初始化FlexCAN模塊,使之來凍結(jié),需要進(jìn)行所有的配置,參見7.1節(jié)。以下是FlexCAN模塊可用的一般初始化順序。初始化所有操作模式:位定時(shí)參數(shù):PROPSEG,PSEG1,PSEG2,RJW(FCCTL0和FCCTL1寄存器);通過編程FCCTL1寄存器的PRES_DIV字段來確定位速率;確定內(nèi)部仲裁模式(FCCTL0寄存器的LBUF位)。初始化信息緩存(MBs):所有的MB的控制/狀態(tài)字必須作為活動(dòng)或非活動(dòng)寫入;MB的其它項(xiàng)目必須按要求初始化。初始化必要的MASK寄存器以允許接收屏蔽:按要求設(shè)置FCIMASK1寄存器中的BUFnnI位(所有MB),F(xiàn)CCTL0中的Busoff和Error中斷,F(xiàn)CMCR中的喚醒(Wake)中斷。初始化FlexCAN的中斷管理程序:清除FCMCR的HALT位:從這個(gè)事件開始,F(xiàn)lexCAN模塊開始嘗試與CAN總線同步。特殊操作模式調(diào)試模式。調(diào)試模式由FRZ1授權(quán)。假設(shè)FRZ1=1,當(dāng)HALT置位時(shí)進(jìn)入調(diào)試模式。一旦設(shè)置為這種模式,F(xiàn)lexCAN等待成為間斷、被動(dòng)錯(cuò)誤、總線關(guān)閉或空閑狀態(tài)。當(dāng)處于這些狀態(tài)其中之一時(shí),F(xiàn)lexCAN等待內(nèi)部的這些動(dòng)作完成,另外相對于從前CAN總線接口發(fā)生了以下事件:FlexCAN模塊停止收/發(fā)信息幀;預(yù)分頻器停止,導(dǎo)致所有相關(guān)行為停止;允許器件讀出或?qū)懭脲e(cuò)誤計(jì)數(shù)寄存器;FlexCAN模塊忽略其CAN_RX引腳的輸入,驅(qū)動(dòng)該引線為隱性;FlexCAN模塊與總線失去同步,F(xiàn)CMCR的NOT_RDY和FREEZ_ACK位置位。申告調(diào)試模式配置位后,執(zhí)行下一步動(dòng)作之前等待FCMCR中的FREEZ_ACK位被置位。警告:疏忽于等待FREEZ_ACK置位將可能導(dǎo)致FlexCAN模塊不可預(yù)知的行為??梢酝ㄟ^以下的方法之一退出調(diào)試模式:清除HALT位;清除FRZ1位;一旦退出了調(diào)試模式,F(xiàn)lexCAN模塊通過等待11個(gè)連續(xù)的隱性位來嘗試與CAN總線再次同步。用于省電的停止模式。注:這節(jié)討論兩種不同的停止模式。這里描述的停止模式是通過寫FCMCR寄存器中的STOP位完成的內(nèi)部停止模式。LPStop是通過STOP指令實(shí)現(xiàn)的,影響整個(gè)芯片。FlexCAN模塊的停止模式是為了實(shí)現(xiàn)省電的功能。當(dāng)設(shè)置這種模式,F(xiàn)lexCAN模塊檢查CAN總線是否處于總線關(guān)閉或空閑模式其中之一,否則它將等待傳送間隔的第3位,檢查其是否隱性。FlexCAN模塊等待所有內(nèi)部操作的完成,除了等待總線接口在發(fā)生以下事件之前:FlexCAN模塊關(guān)閉它的時(shí)鐘,停止大多數(shù)內(nèi)部電路,因此節(jié)約了最大功率。IPBus接口邏輯繼續(xù)運(yùn)行,允許器件訪問FCMCR。FlexCAN模塊忽略CAN_RX輸入引線,并驅(qū)動(dòng)CAN_TX引線為隱性。FlexCAN模塊與總線失去同步,F(xiàn)CMCR的NOT_RDY和STOP_ACK位置位??梢酝ㄟ^以下的方法之一退出調(diào)試模式:清除FCMCR的STOP位。如果FlexCAN模塊進(jìn)入停止模式時(shí),F(xiàn)CMCR的SELF_WAKE置位,則當(dāng)檢測到CAN總線上隱性到顯性變化,F(xiàn)lexCAN模塊復(fù)位FCMCR的STOP位,恢復(fù)時(shí)鐘。當(dāng)處于Stop或LPStop模式,CAN總線上的一個(gè)隱性到顯性的變化將引起錯(cuò)誤和狀態(tài)寄存器中的WAKE_INT位置位。如果FCMCR中的WAKE_MASK位置位,該事件將引起一個(gè)器件中斷。停止模式操作說明。在停止/自喚醒模式下,F(xiàn)lexCAN模塊嘗試接收響應(yīng)幀來喚醒,換而言之,假設(shè)接收到的顯性位是幀起始,它不參加CAN總線的仲裁。在宣告進(jìn)入停止模式前,器件應(yīng)當(dāng)禁止FlexCAN模塊的所有中斷。如不這樣做,在停止模式下的一個(gè)非喚醒(NonWake-up)狀態(tài)將導(dǎo)致一次中斷。如需要,WAKE_MASK位需置位,以允許喚醒(Wake-up)中斷。如果宣告進(jìn)入停止模式時(shí)FlexCAN模塊處于總線關(guān)閉(Busoff)狀態(tài),模塊將轉(zhuǎn)到停止模式。在此時(shí)刻,它停止計(jì)數(shù)同步序列。一旦停止位被清除,計(jì)數(shù)將繼續(xù)。參見8.10節(jié)。按以下正確的流程進(jìn)入帶自喚醒功能的停止模式。宣告停止(Stop)模式同時(shí)宣告自喚醒(SELF_WAKE)。等待STOP_ACK位置位。在自喚醒時(shí)清除停止?fàn)顟B(tài)的正確流程:清除停止(Stop)模式同時(shí)清除自喚醒。等待STOP_ACK位無效。SELF_WAKE的設(shè)置僅能在FCMCR中STOP位清除以及FlexCAN模塊就緒的情況下進(jìn)行。也就是FCMCR的NOT_RDY位是清除的。如果設(shè)置了STOP和SELF_WAKE,并且如果一個(gè)隱性到顯性的邊沿隨之立即出現(xiàn)在CAN總線上,F(xiàn)CMCR的STOP_ACK位可能永遠(yuǎn)不會置位,重新設(shè)置FCMCRSTOP位。為避免當(dāng)FlexCAN模塊喚醒時(shí)無用的舊幀被發(fā)送,可在停止之前禁用所有的發(fā)送源,遠(yuǎn)程響應(yīng)也包含在內(nèi)。如果宣告停止模式時(shí)調(diào)試模式有效,調(diào)試模式的FlexCAN模塊將被退出。調(diào)試模式試圖同步CAN總線(11個(gè)連續(xù)的隱性位),搜索合適的條件來進(jìn)入停止模式。允許嘗試復(fù)位后立即停止FlexCAN模塊,但僅在完成基本初始化之后。如果停止模式由自喚醒激活,并且FlexCAN模塊運(yùn)行在每元時(shí)間一個(gè)系統(tǒng)時(shí)鐘的狀態(tài),有一種極端情形:FlexCAN模塊由隱性到顯性的邊沿喚醒時(shí)可能不遵從BOSCHCAN協(xié)議,這種意義上,F(xiàn)lexCAN模塊同步從必需的情形移動(dòng)一個(gè)元時(shí)間。這種移動(dòng)持續(xù)直到下一個(gè)隱性到顯性的邊沿,往回重新同步FlexCAN模塊,以遵從協(xié)議。在自動(dòng)節(jié)電模式由隱性到顯性邊沿喚醒的情形也同樣適用。參見7.3節(jié)。如果發(fā)送時(shí)期執(zhí)行LPStop,數(shù)據(jù)可能丟失,發(fā)生與BOSCHCAN協(xié)議的不一致。使用時(shí)小心確認(rèn)在將器件置于LPStop模式前,F(xiàn)lexCAN模塊處于空閑狀態(tài)。自動(dòng)省電模式。FlexCAN模塊的這個(gè)模式旨在優(yōu)化電源節(jié)省的同時(shí)允許一般操作。設(shè)置FCMCR的AUTO_PWR_SAVE位,F(xiàn)lexCAN模塊尋找時(shí)鐘不必運(yùn)行的一組條件,如果所有這些條件具備,F(xiàn)lexCAN模塊停止其時(shí)鐘,從而節(jié)約了電源。如果當(dāng)時(shí)鐘停止時(shí),下面提及的條件的任何一個(gè)不再為真,模塊恢復(fù)時(shí)鐘。FlexCAN模塊持續(xù)監(jiān)視這些條件,據(jù)此停止或恢復(fù)時(shí)鐘。進(jìn)程中沒有接收或發(fā)送的幀。接收/發(fā)送幀不在SMB和MB之間移動(dòng),或者任何MB中都沒有待發(fā)送的CANTX幀。FlexCAN模塊核心訪問不可用。FlexCAN模塊不處于以下的任何模式:調(diào)試模式(FCMCR位8);停止模式(FCMCR位15);總線關(guān)閉。寄存器定義。表7:FlexCAN存儲器映射各個(gè)FlexCAN寄存器的地址是基址與偏移的和,關(guān)于FlexCAN基址的定義請參考器件的數(shù)據(jù)手冊,所有的存儲單元基址和偏移地址由寄存器匯總表以16進(jìn)制給出。表8:FlexCAN寄存器匯總表8:FlexCAN寄存器匯總(續(xù))表8:FlexCAN寄存器匯總(續(xù))表8:FlexCAN寄存器匯總(續(xù))127個(gè)寄存器各自的位域圖示于圖5,詳細(xì)說明跟隨其后。圖5:FlexCAN寄存器映射模塊配置寄存器(FCMCR)圖6:模塊配置寄存器停止(STOP)—Bit15該位設(shè)置低功率睡眠模式,可以由器件設(shè)定。該位可由器件清除,如果FCMCR中的SELF_WAKE置位,也可僅由FlexCAN清除。0=允許FlexCAN時(shí)鐘運(yùn)行。1=關(guān)閉FlexCAN時(shí)鐘。請參考7.2節(jié)。凍結(jié)允許(FRZ1)—Bit14FRZ1位指定FlexCAN模塊響應(yīng)FCMCR的HALT位的聲明。復(fù)位期間該位初始化為1,清除該位將導(dǎo)致FlexCAN模塊退出調(diào)試模式,詳細(xì)的描述參見7.1節(jié)。0=忽略FCMCR的HALT位。FlexCAN模塊正常運(yùn)行。1=FlexCAN模塊能夠進(jìn)入調(diào)試模式。當(dāng)FREZ=1時(shí),允許FlexCAN模塊進(jìn)入FRZ1/HALT模式。為了進(jìn)入該模式,F(xiàn)RZ1必須設(shè)為1,并且FCMCR中的FRZ1/HALT必須設(shè)置,清除該位將導(dǎo)致FlexCAN模塊從FRZ1/HALT模式中退出,請參見7.1節(jié)。保留位—Bit13該位保留或不被填充,初始化為零且不能通過寫入來修改(FlexCAN的其它實(shí)現(xiàn)中此位為FRZ0)停止SClock(HALT)—Bit12當(dāng)HALT和FRZ1置位,F(xiàn)lexCAN進(jìn)入調(diào)試模式。該位在復(fù)位時(shí)初始化為1。初始化MB和控制寄存器后,HALT位應(yīng)當(dāng)清除,在它清除之前不會發(fā)生接收或發(fā)送操作。當(dāng)聲明了HALT,錯(cuò)誤計(jì)數(shù)寄存器可寫。請參見7.1節(jié)。0=FlexCAN正常運(yùn)行。1=如果FRZ1=1,進(jìn)入調(diào)試模式。FlexCAN未就緒(NOT_RDY)—Bit11這個(gè)只讀位指示FlexCAN進(jìn)入了停止或調(diào)試模式。一旦FlexCAN通過同步到總線(11個(gè)隱性位)或者由自喚醒機(jī)制退出調(diào)試模式,該位被清除。喚醒中斷屏蔽(WAKE_MASK)—Bit10該位使能產(chǎn)生喚醒中斷(Wake-Up)。0=喚醒中斷禁止。1=喚醒中斷允許。軟件復(fù)位(SOFT_RST)—Bit9當(dāng)宣告了SOFT_RST,F(xiàn)lexCAN復(fù)位其內(nèi)部狀態(tài)機(jī)(序列發(fā)生器,錯(cuò)誤計(jì)數(shù)器,錯(cuò)誤標(biāo)志,定時(shí)器)以及接口寄存器(FCMCR,FCIMASK1,FCIFLAG1,FCMAXMB)??刂莆豢刂浦鳦AN總線(FCCTL0和FCCTL1)與MB的接口,以及接收信息不被改變。這就允許器件使用SOFT_RST在系統(tǒng)運(yùn)行時(shí)作為調(diào)試功能。SOFT_RST也影響FCMCR,導(dǎo)致STOP位復(fù)位。FlexCAN在停止的節(jié)電模式后恢復(fù)時(shí)鐘SOFT_RST位維持HALT/FRZ1位,引起FlexCAN模塊進(jìn)入調(diào)試模式。該位自行清除。注:設(shè)置SOFT_RST后,下一個(gè)器件訪問不應(yīng)是到FlexCAN模塊的,以允許FlexCAN的內(nèi)部電路完全復(fù)位。FlexCAN禁用(FREEZ_ACK)—Bit8。該只讀位提供模塊在調(diào)試模式,停止預(yù)分頻器的狀態(tài)的指示。其值為:0=FlexCAN退出調(diào)試,預(yù)分頻器允許。1=FlexCAN進(jìn)入調(diào)試模式,預(yù)分頻器禁止。FREEZ_ACK在FlexCAN模塊進(jìn)入調(diào)試模式時(shí)置位,器件可以通過查詢此位的方式來確定模塊進(jìn)入了調(diào)試模式,當(dāng)FlexCAN退出調(diào)試,該位被清除。當(dāng)預(yù)分頻器運(yùn)行時(shí)該位也會被清除。請參見節(jié)。保留位—Bit7該位保留或不執(zhí)行操作,讀寫為零。自喚醒(SELF_WAKE)—Bit6該位允許在不需要器件干涉的情況下,F(xiàn)lexCAN在停止后自主喚醒。如此位置位,當(dāng)進(jìn)入停止模式,在停止期間,F(xiàn)lexCAN模塊在總線尋找一個(gè)顯性位,如果檢測到一個(gè)隱性到顯性的過渡,模塊立即清除STOP位,恢復(fù)時(shí)鐘。如果一次到FCMCR的SELF_WAKE置位寫操作正好同時(shí)發(fā)生在CAN總線上隱性到顯性的邊沿時(shí)刻,則該位不被置位,模塊時(shí)鐘不會停止。可通過讀FCMCR來校驗(yàn)該位是否置位。注:如果最終執(zhí)行了LPStop命令,該位將不會置位,更詳細(xì)的信息參見節(jié)。自動(dòng)節(jié)電(AUTO_PWR_SAVE)—Bit5該位允許FlexCAN在沒有程序需要執(zhí)行時(shí),關(guān)掉自己的時(shí)鐘來節(jié)約電源,然后在沒有任何器件參與的情況下自動(dòng)地恢復(fù)同樣的時(shí)鐘。注:IPBus時(shí)鐘沒有停止,以允許器件訪問,自動(dòng)節(jié)電模式不依賴于SELF_WAKE(Bit6)或WAKE_MASK(Bit10)位的值。0=自動(dòng)節(jié)電模式無效,時(shí)鐘正常運(yùn)行。1=自動(dòng)節(jié)電模式有效,時(shí)鐘按需要停止和恢復(fù)。FlexCAN停止(STOP_ACK)—Bit4FlexCAN在停止模式,同時(shí),主時(shí)鐘停止。這是一個(gè)只讀位,當(dāng)FlexCAN模塊進(jìn)入停止模式并且時(shí)鐘停止時(shí),其值為1,而停止模式清除并且時(shí)鐘再次運(yùn)行時(shí),其值為0,參見7.2節(jié)。當(dāng)FlexCAN進(jìn)入停止模式,并停止了自己的時(shí)鐘,它置位STOP_ACK位。器件可以查詢此位來了解是否FlexCAN已經(jīng)進(jìn)入停止模式并停止了時(shí)鐘,如果Stop模式清除,一旦FlexCAN模塊的時(shí)鐘運(yùn)行,該位關(guān)閉。0=FlexCAN退出停止(Stop)模式。1=FlexCAN進(jìn)入停止模式。保留位—Bits3–0。該位域保留或不生效。讀取時(shí)為0,且不能改寫??刂萍拇嫫?(FCCTL0)這些寄存器(FCCTOL0,F(xiàn)CCTL1,以及FCTIMER)提供與CAN總線相關(guān)的控制方法。例如位速率、CANRX位內(nèi)的可編程采樣點(diǎn),以及全局自由運(yùn)行定時(shí)器。圖7:控制器存器0(FCCTL0)總線關(guān)閉屏蔽(BOFF_MASK)—Bit15該位提供總線關(guān)閉中斷(Busoff)的屏蔽0=中斷禁止;1=中斷允許。錯(cuò)誤屏蔽(ERR_MASK)—Bit14該位提供錯(cuò)誤中斷(Error)的屏蔽0=中斷禁止;1=中斷允許。保留—Bits13–8該位域保留或不生效。位讀/寫僅能用0。試圖對改變這些為會引起未知的功能改變。警告:訪問該寄存器時(shí)應(yīng)慎重考慮,僅往這些位寫0。樣本眾數(shù)(SAMP)—Bit7。采樣位決定FlexCAN模塊采樣每個(gè)接收位、確定其數(shù)值時(shí)是采樣1次還是3次。0=(復(fù)位值)用1次采樣來確定接受到的位的值。1=用3次采樣來確定接受到的位的值,正常的一個(gè)(采樣點(diǎn))和領(lǐng)先SClock周期的兩個(gè),使用多數(shù)決定原則。回環(huán)模式(LOOPB)—Bit6該位僅能在測試模式下置位,僅僅除了FCMAXMB寄存器的TEST_EN位置位。參見節(jié)。如果此位置位,內(nèi)部的回環(huán)被允許,阻止模塊檢測到總線活動(dòng)。0=回環(huán)模式禁止;1=回環(huán)模式允許。時(shí)間同步模式(TSYNC)—Bit5該位允許機(jī)構(gòu)在每個(gè)接收信息進(jìn)入MB0的時(shí)候復(fù)位或清除自由運(yùn)行定時(shí)器。該位提供用特殊的同步信息同步多個(gè)FlexCAN站點(diǎn)的途徑。也就是全局網(wǎng)絡(luò)時(shí)間,Buffer0中斷同樣可用。0=定時(shí)器同步禁止。1=定時(shí)器同步允許。最低緩沖先行傳輸(LBUF)—Bit4該位定義先行發(fā)送安排。0=低ID先發(fā)。1=低緩沖器號先發(fā)。注:LBUF=0時(shí),如果多個(gè)MB擁有同樣的ID,數(shù)據(jù)幀先于遠(yuǎn)程幀發(fā)送。同樣ID的數(shù)據(jù)幀或遠(yuǎn)程幀之中,低緩沖的先發(fā)。單偵聽模式(LOM)—Bit3該控制位配置FlexCAN到單偵聽模式。該模式下,模塊能夠在沒有應(yīng)答的情況下接收信息,或者在總線上活動(dòng)以供診斷。詳細(xì)信息請參見6.8節(jié)。0=正規(guī)操作,單偵聽模式關(guān)閉。1=允許單偵聽模式。傳播段(PROPSEG)—Bits2–0該位域定義位定時(shí)的傳播段長度,合法的編程值為0到7。傳播段時(shí)間=(PROPSEG+1)×元時(shí)間1個(gè)元時(shí)間=1個(gè)SClock周期(參見8.3節(jié))控制寄存器1(FCCTL1)。圖8:控制器存器1(FCCTL1)預(yù)分頻因子(PRES_DIV)—Bits15–8該位域決定系統(tǒng)時(shí)鐘和串行時(shí)鐘(Sclock)(1Sclock=1元時(shí)間)之間的頻率比率。SClock等于系統(tǒng)時(shí)鐘除以該寄存器的值加1。該寄存器的復(fù)位值是0,意味著SClock等于系統(tǒng)時(shí)鐘的頻率。該8bit位域的最大值是0xFF,給出的最小SClock頻率=系統(tǒng)時(shí)鐘÷256。更多信息請參見6.9節(jié)。再同步跳轉(zhuǎn)寬度(RJW)—Bits7–6。該位域定義一次重新同步過程中一個(gè)位的元時(shí)間數(shù)量能夠改變的最大值。合法的數(shù)值是0到3。再同步跳轉(zhuǎn)寬度=(RJW+1)×元時(shí)間相位段1(PSEG1)—Bits5–3.該位域定義位定時(shí)中相位緩沖段1的長度,合法數(shù)值為0到7。相位緩沖段1=(PSEG1+1)×元時(shí)間相位段2(PSEG2)—Bits2–0.該位域定義位定時(shí)中相位緩沖段2的長度,合法數(shù)值為0到7。相位緩沖段2=(PSEG2+1)×元時(shí)間自由運(yùn)行定時(shí)器(FCTMR)圖9:自由運(yùn)行定時(shí)器(FCTMR)自由運(yùn)行定時(shí)器(TMR)—Bits15–0此16位自由運(yùn)行計(jì)數(shù)器由器件讀寫。定時(shí)器復(fù)位后從零開始,線性計(jì)數(shù)到0xFFFF,然后回轉(zhuǎn)。該定時(shí)器的時(shí)鐘由FlexCAN模塊位時(shí)鐘驅(qū)動(dòng),在一個(gè)信息期間,每位的收發(fā)使其加1。當(dāng)總線上沒有信息時(shí),它按照額定位速率計(jì)數(shù)。定時(shí)器的值在CAN總線上幀的ID字段起始時(shí)被捕捉,信息的收發(fā)成功完成后該值寫入MB的TIME_STAMP項(xiàng)。最大信息緩沖寄存器(FCMAXMB)圖10:最大信息緩存寄存器(FCMAXMB)警告:改變位15–8、6–4的值會導(dǎo)致不希望的功能。保留位—Bits15–8。這個(gè)位域保留或不被執(zhí)行,其中的位初始化時(shí)為0,并僅能寫入0。測試允許(TEST_EN)—Bit7該只讀位在設(shè)置FCCTL0的LOOPB位之前被置位,參見節(jié)關(guān)于環(huán)回模式的更多信息。0=測試模式禁用;1=測試模式允許。保留位—Bits6–4這個(gè)位域保留或不被執(zhí)行,其中的位初始化時(shí)為0,并僅能寫入0。最大信息緩沖(MAXMB)—Bits3–0。該位域定義模塊的最大MB的配置。這些位的復(fù)位值是0xF,對應(yīng)于一個(gè)16-MB的配置。使用中最大MB數(shù)=MAXMB+1接收屏蔽(ReceiveMask)寄存器這些寄存器用于對接收的幀ID進(jìn)行認(rèn)可屏蔽。兩個(gè)全局屏蔽、描述為高和低,用于接收MB的0到13。四個(gè)額外的屏蔽用于緩沖14和15,描述為高和低(High,Low)。0=屏蔽位:對應(yīng)新進(jìn)幀的ID位不考慮。:ThecorrespondingincomingIDbitisdon’tcare1=屏蔽位:對應(yīng)的ID位與新進(jìn)幀的ID進(jìn)行檢查,確定是否存在匹配。注:標(biāo)準(zhǔn)和擴(kuò)展幀都使用這些屏蔽,一般操作模式下,這些屏蔽寄存器的值不應(yīng)變化,就像鎖定的幀通過屏蔽匹配一個(gè)MB,能夠傳輸?shù)組B(然后立即釋放),但可能不再匹配。表9:普通/擴(kuò)展信息屏蔽示例注:(1)擴(kuò)展模式匹配(MB3)(2)標(biāo)準(zhǔn)模式匹配(MB2)(3)與MB3失配,由于ID0(4)與MB2失配,由于ID28(5)與MB3失配,由于ID28,與MB14匹配(6)與MB14失配,由于ID27(7)匹配MB14全局接收屏蔽(FCRXGMASK_HandFCRXGMASK_L)全局接收屏蔽寄存器由4個(gè)字節(jié)組成,這些屏蔽位作用于除擁有專用屏蔽寄存器的MB14和MB15外的所有接收到的ID。圖11:接收全局屏蔽高位寄存器(FCRXGMASK_H)圖12:接收全局屏蔽低位寄存器(FCRXGMASK_L)屏蔽ID28到18(MID28--MID18)—Bits31–21這些位對標(biāo)準(zhǔn)形式和擴(kuò)展形式一致。保留位—Bit20接收幀的這些為從不與對應(yīng)的MB中ID字段的位相比較。注:遠(yuǎn)程幀從不接收進(jìn)MB。位于屏蔽寄存器的RTR屏蔽(位20和零)總是當(dāng)作0,而不管任何的對這些位的器件寫入。保留位—Bit19接收幀的IDE位總是進(jìn)行比較。屏蔽寄存器中的這個(gè)位總是為1,而不管任何的對該位的器件寫入。屏蔽ID17到1(MID17--MIDOS)—Bits18–1這些位僅在擴(kuò)展模式中進(jìn)行比較。保留位—Bit0該位保留或不生效,它作為0并不能改寫。接收緩沖14屏蔽寄存器(FCRX14MASK_H/_L)接收緩沖14屏蔽寄存器與全局屏蔽寄存器結(jié)構(gòu)相同,它用于屏蔽緩沖14(Buffer14)。圖13:接收緩存14屏蔽高位寄存器(FCRX14MASK_H)圖14:接收緩存14屏蔽低位寄存器(FCRX14MASK_L)接收緩沖15屏蔽寄存器(FCRX15MASK_H/_L)接收緩沖15屏蔽寄存器與全局屏蔽寄存器結(jié)構(gòu)相同,它用于屏蔽緩沖15(Buffer15)。圖15:接收緩存15屏蔽高位寄存器(FCRX14MASK_H)圖16:接收緩存15屏蔽低位寄存器(FCRX14MASK_L)錯(cuò)誤和狀態(tài)寄存器(FCSTATUS)該寄存器反映不同的錯(cuò)誤情況,以及器件的一些正常狀態(tài)。它是到核心的三個(gè)中斷的中斷源。位15到10所報(bào)告的錯(cuò)誤情況,發(fā)生在內(nèi)核最后一次讀取該寄存器時(shí)刻之后。讀此寄存器將使這些位清零。除BOFF_INT,ERR_INT,和WAKE_INT外,寄存器的所有位都是只讀的。那些位是中斷源,可以由核心寫零,更多信息參見第9節(jié),位9到位3是狀態(tài)位。圖17:錯(cuò)誤和狀態(tài)寄存器(FCSTATUS)位1錯(cuò)誤(BIT1_ERR)—Bit150=未發(fā)現(xiàn)錯(cuò)誤。1=至少一個(gè)位作為隱性發(fā)出而收到的是顯性位。注:在仲裁字段或應(yīng)答(ACK)時(shí)隙,或者一個(gè)節(jié)點(diǎn)發(fā)送被動(dòng)邊界標(biāo)志時(shí)檢測到顯性位的情況下,該位并不是由發(fā)送器置位的。位0錯(cuò)誤(BIT0_ERR)—Bit140=未發(fā)現(xiàn)錯(cuò)誤。1=至少一個(gè)位作為顯性發(fā)出而收到的是隱性位。應(yīng)答錯(cuò)誤(ACK_ERR)—Bit130=未發(fā)生1=最后一次讀該寄存器以來,發(fā)生了應(yīng)答錯(cuò)誤。循環(huán)冗余校驗(yàn)碼(CRC)錯(cuò)誤(CRC_ERR)—Bit120=未發(fā)生1=最后一次讀該寄存器以來,發(fā)生了CRC錯(cuò)誤。形式錯(cuò)誤(FORM_ERR)—Bit110=未發(fā)生1=最后一次讀該寄存器以來,發(fā)生了形式錯(cuò)誤。位填充錯(cuò)誤(STUFF_ERR)—Bit100=未發(fā)生1=最后一次讀該寄存器以來,發(fā)生了位填充錯(cuò)誤。發(fā)送警告(TX_WARN)—Bit9該位不引起中斷。0=發(fā)送錯(cuò)誤計(jì)數(shù)器CANTX_ERR_Counter<96,1=發(fā)送錯(cuò)誤計(jì)數(shù)器CANTX_ERR_Counter>=96接收警告(TX_WARN)—Bit9該位不引起中斷。0=接收錯(cuò)誤計(jì)數(shù)器CANRX_ERR_Counter<96,1=接收錯(cuò)誤計(jì)數(shù)器CANRX_ERR_Counter>=96空閑(IDLE)—Bit70=CAN總線非空閑,見TX/RX位1=CAN總線空閑。發(fā)送接收(TX/RX)—Bit60=若IDLE=0,F(xiàn)lexCAN正在接收信息1=若IDLE=0,F(xiàn)lexCAN正在發(fā)送信息故障禁止?fàn)顟B(tài)(FCS)—Bits5–400=錯(cuò)誤主動(dòng)01=錯(cuò)誤被動(dòng)1X=總線關(guān)閉如果當(dāng)FlexCAN模塊處于總線關(guān)閉狀態(tài)時(shí),申告了FCMCR中的SOFT_RST,那么錯(cuò)誤和狀態(tài)寄存器復(fù)位(包括FCS位),但當(dāng)退出禁止?fàn)顟B(tài),F(xiàn)CS位恢復(fù)反映總線關(guān)閉狀態(tài)。從錯(cuò)誤被動(dòng)到總線關(guān)閉轉(zhuǎn)換,更新錯(cuò)誤禁止?fàn)顟B(tài)大約從產(chǎn)生總線關(guān)閉狀態(tài)轉(zhuǎn)換的錯(cuò)誤發(fā)生后一個(gè)位時(shí)間。保留位—Bit3該位保留或不生效,它作為0并不能改寫。總線關(guān)閉中斷(BOFF_INT)—Bit2該位在每次FlexCAN狀態(tài)轉(zhuǎn)換到總線關(guān)閉時(shí)置位。如果FCCTL0的BOFF_MASK置位,將向核心產(chǎn)生一次中斷參見節(jié)。該中斷不會在復(fù)位后產(chǎn)生。該位必須清零。清零時(shí),先讀取錯(cuò)誤和狀態(tài)寄存器,然后向該位寫1,寫0沒有作用。大約在檢測到產(chǎn)生總線關(guān)閉狀態(tài)過渡的位錯(cuò)誤后一個(gè)位時(shí)間,發(fā)出總線關(guān)閉中斷申告。錯(cuò)誤中斷(ERR_INT)—Bit1該寄存器中的一個(gè)錯(cuò)誤位置位,該位隨時(shí)置位。甚至錯(cuò)誤位已經(jīng)置位這也是確定的。如果FCCTL0的ERR_MASK置位,則向核心產(chǎn)生一個(gè)中斷。請參見8.2.2.該位必須清零。清零時(shí),先讀取錯(cuò)誤和狀態(tài)寄存器,然后向該位寫1,寫0沒有作用。喚醒中斷(WAKE_INT)—Bit0當(dāng)FlexCAN模塊處于停止模式,并檢測到CAN上的一個(gè)隱性打掃顯性變化時(shí),該位置位。如果FCMCR的WAKE_MASK置位,則向核心產(chǎn)生一個(gè)中斷。請參見8.1。清零該位時(shí),先讀取錯(cuò)誤和狀態(tài)寄存器,然后向該位寫1,寫0沒有作用。中斷屏蔽寄存器1(FCIMASK1)該寄存器包含每個(gè)MB一個(gè)的中斷屏蔽。它允許FlexCAN模塊確定那個(gè)緩沖將能在一次成功地的收/發(fā)后產(chǎn)生中斷,那時(shí)對應(yīng)的FCIFLAG1位置位。圖17:中斷屏蔽寄存器1(FCIMASK1)緩沖中斷屏蔽(BUF15M–BUF0M)—Bits15–00=禁止對應(yīng)的緩沖中斷。1=允許對應(yīng)的緩沖中斷。注:設(shè)置或清除FCIMASK1寄存器的位可以分別申告和清除中斷請求。中斷標(biāo)志寄存器(FCIFLAG1)該寄存器包含每個(gè)MB一個(gè)的中斷標(biāo)志。每次成功的收/發(fā)設(shè)置對應(yīng)的BUFnI位,并且,如果對應(yīng)的FCIMASK1位置位,將產(chǎn)生一個(gè)中斷。圖19:中斷標(biāo)志寄存器1(FCIFLAG1)緩沖中斷(BUF15I-BUF0I)—Bits15–00=對應(yīng)的緩沖沒有成功完成發(fā)送或接收。1=對應(yīng)的緩沖成功完成了發(fā)送或接收。中斷標(biāo)志必須通過先讀中斷標(biāo)志寄存器,然后向該位寫1的方法清零,寫0無效。復(fù)位時(shí)該寄存器初始化到全部為零。錯(cuò)誤計(jì)數(shù)器(FC_ERR_CNTRS)FlexCAN模塊有兩個(gè)錯(cuò)誤計(jì)數(shù)器:1.發(fā)送錯(cuò)誤計(jì)數(shù)器2.接收錯(cuò)誤計(jì)數(shù)器圖20:錯(cuò)誤計(jì)數(shù)器1(FC_ERR_CNTRS)增減這些計(jì)數(shù)器的規(guī)則由CAN協(xié)議指出,這些規(guī)則在FlexCAN模塊中完全實(shí)現(xiàn)。每個(gè)計(jì)數(shù)器由以下部分組成:?8-bit升/降計(jì)數(shù)器?以8遞增(CANRX_ERR_CN

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論