龍芯1D是超聲波熱表、水錶和氣表測量專用 SoC 晶元。該晶元集成超聲波時間測量、超聲波脈衝發生器、溫度測量單元、CPU、串口、紅外收發器、段式LCD 控制器、電壓檢測單元、空管檢測單元、超聲波換能器斷線檢測等功能部件,配合完善的編程、模擬、調試環境,將會大大簡化超聲波熱表測量系統的軟硬體設計。 龍 ...
龍芯1D是超聲波熱表、水錶和氣表測量專用 SoC 晶元。該晶元集成超聲波時間測量、超聲波脈衝發生器、溫度測量單元、CPU、串口、紅外收發器、段式LCD 控制器、電壓檢測單元、空管檢測單元、超聲波換能器斷線檢測等功能部件,配合完善的編程、模擬、調試環境,將會大大簡化超聲波熱表測量系統的軟硬體設計。
龍芯 1D 由測量模塊、處理器子系統、電源管理模塊、顯示模塊等部分組成,採用 AXI、APB 匯流排相連。
其中,
(1)CPU 是處理器子系統,是整個晶元的控制核心,處理器子系統包括處理器核以及 Flash、SPI 等外設模塊,其電源可單獨關閉以節約功耗;
(2)Snrths 是測量模塊,包括脈衝發生器、模擬比較器和時間數字轉換器,時間測量精度達到 40ps,其電源可關閉以節約功耗;
(3)LCD 顯示模塊是段式 LCD 控制器,最多可對 96 段進行顯示控制,電源由軟體來控制,可單獨關閉以降低功耗;
(4)PMU 是電源管理模塊,是實現低功耗的關鍵部件。PMU 域的電源不可關斷,自晶元硬複位之後,PMU 域將一直保持上電狀態,從而實現對晶元其他模塊的電源管理。系統啟動後,軟體可配置 PMU 寄存器,根據實際需要打開或者關閉CPU、Snrths 和 LCD 模塊的電源,實現晶元功耗的精細控制。
LS132R 處理器核
LS132R 處理器核,相容 MIPS32 指令集,包含一個硬體浮點部件,支持單精度 float 類型的浮點運算。(如需瞭解 MIPS 架構的背景知識,請參考 MIPS 官方文檔。)
LS132R 處理器核是 32 位的處理器,一共有 32 個 32 位的通用寄存器,編號為$1~$31,用於數據的存儲和運算;在協處理器 CP0(Co-Processor)中包含幾個特殊的控制寄存器 SFR(Special Function Register),用於控制處理器的工作模式,當晶元上電或者複位時,需要對這些 SFR 進行配置,將處理器核初始化到一個合適的狀態。
下麵對幾個需要配置的 SFR 進行簡要介紹(本手冊只標出實際中使用到的位域,請用戶根據需要進行配置,其他未介紹的位域使用時請寫‘0’):
CP0_COUNT(RO)
CP0_COUNT 和 CP0_COMPARE 這兩個寄存器構成一個定時器,初始值都是 0,達到最大計數時也會自動清零,時鐘源是晶元時鐘(8MHz),也就是每 125ns 自動地 Count 寄存器加一,當 Count 和 Compare 相等時,產生一個 Timer 中斷(參考 13.1 節內容)。往 CP0_COMPARE 寄存器寫進一個新的值,可以清除這個中斷。
CP0_STATUS(R/W)
其中,
CU1------“1”代表 enable 硬體浮點部件,“0”disable
CU0------“1”代表可訪問控制器 CP0,“0”disable
BEV------“1”代表中斷入口在 0xbfc00380
NMI------“1”代表出現 NMI,“0”表示不是 NMI
IMx------“1”代表 enable 第 x 號中斷,“0”disable
IE-------“1”代表 enable 所有中斷,“0”disable
註意:預設狀態下不支持中斷嵌套。
CP0_CAUSE(ExcCode 位域 RO,其它 R/W)
其中,
DC------“0”代表 enable 定時器(CP0_COUNT 和 CP0_COMPARE),“1”disable
IPx------“1”代表第 x 號中斷等待處理
ExcCode-----代表異常類型
註:“RO----只讀,R/W--可讀可寫,WO--只寫”,這些都代表寄存器的訪問類型,後面內容的描述都參照這個標準。
地址空間
註 1:訪問類型包括位元組(B),半字(H)和字(W),訪存地址必須對齊。
註 2:若訪存超出上表定義的範圍則會觸發 NMI 例外。
軟體對地址空間的訪問方式
龍芯1D晶元相容 MIPS 架構,沒有 cache 和 MMU 部件,軟體可訪問的地址空間為 0xa000,0000~0xbfff,ffff 這部分邏輯地址,通過將高 3 位(二進位)的地址清零來映射到物理地址 0x0000,0000~0x1fff,ffff。因此,軟體在訪問上述列表的地址時,需要訪問對應的邏輯地址,計算公式為:(邏輯或操作)
邏輯地址 = 物理地址 | 0xa000,0000
例如,軟體要讀寫 SRAM 第一個位元組,訪問的地址為 0xa000,0000,實際上訪問的是 0x0000,0000。
測量相關寄存器
註:該表中的寄存器都處於 PMU 域,一直處於上電狀態,晶元在“運行”和“休眠”之間切換時,這些寄存器的內容不變。
電源與測量控制
測量過程介紹
龍芯 1D 集成了完善的時差和溫度測量功能。一個測量過程包括以下幾個步驟:
1. 測量事件觸發;
2. 測量模塊啟動,完成指定的測量後將值寫入結果寄存器並引發中斷;
3. 軟體被喚醒,從結果寄存器取值並處理,隨後清空結果寄存器;
4. 等待下一個測量事件
其中測量事件的觸發有兩種方式:
1. 單次測量:軟體往 StartOP 位寫 1,啟動 MOP 類型的測量;
2. 定時測量:開啟巡航模式,硬體會根據配置,周期性地產生測量事件。
測量是非常精密的過程,對環境要求較高,因此軟體最好在測量模塊工作前將晶元置為休眠模式,關閉處理器系統。
電源管理
龍芯1D實現了完善的電源管理,通過有效的軟體控制,可大大延長電池壽命。按電源狀態分組,龍芯 1D 包括:電源管理模塊(PMU)、液晶顯示模塊(SLCD)、測量模塊(SNRTHS,Sonar 和 Thsens 的縮寫)、處理器模塊(CPU),如圖 4- 1 所示。
除 PMU 外,其它模塊均實現了低功耗關斷模式。
(1)SLCD 模塊的電源由 ChipCtrl.lcd_pd 一位控制,寫 1 關斷,寫 0 打開。該模塊的電源只能由軟體進行控制,關斷後再次打開需要重新配置其寄存器。
(2)SNRTHS 模塊的電源主要由測量狀態機自動控制。當有新的測量操作需要進行時,電源將自動打開;當測量結束,測量結果被軟體讀走(resread)後,電源自動關斷。該模塊的配置寄存器不會因為電源關斷而丟失,因此軟體無需反覆配置。但應註意,如果其電源處於關斷狀態,模塊內所有寄存器將無法訪問,讀寄存器操作只會返回 0,寫操作則被忽略掉。將 ChipCtrl.sonar_pd 寄存器寫 0可強行將該模塊打開,不受測量狀態機的控制。SNRTHS 模塊需要一段時間上電,軟體強行打開後等 8 個時鐘周期(8 條指令的延遲)才能訪問。
(3)CPU 模塊的電源只能被軟體關斷,並且只能通過 PMU 中斷喚醒後自動打開電源。(詳見 13.1 節內容,並不是所有中斷都能喚醒 CPU)CPU 模塊的關斷由 Command.Sleep 控制,軟體寫 1 後進入關斷模式,軟體需要保證在關斷電源之前所有內部模塊(包括 cpu 核以及外設模塊)都已完成任務,否則關斷操作將強制關閉模塊電源造成異常。例如,軟體寫 1 執行關斷操作時,如果串口列印尚未完成,那麼列印信息的末端將不能正常顯示而是出現亂碼。當PMU 有中斷時,CPU 模塊將被喚醒並自動打開電源。喚醒後 CPU 模塊內所有內部寄存器都會被覆位成預設值,處理器的執行與系統複位一致,因此軟體需要重新進行初始化操作。軟體需要判斷是一次系統複位,還是一次待機喚醒(無需重新初始化 PMU 域寄存器)。一個簡單的方法是在不掉電的 PMU 模塊中ChipCtrl.soft_flag 寄存器存儲狀態信息,根據其複位值為 0 進行判斷。CPU 模塊在關斷、打開時還會控制外部的 SPI Flash,使其進行相應的電源狀態轉換。如果沒有外部 SPI Flash,則關閉此功能可加速 CPU 模塊的電源狀態轉換,進一步降低功耗。
“運行”和“休眠”
CPU 模塊是系統運行的必要條件,根據 CPU 模塊的電源開關情況,可以將晶元劃分為兩個狀態:“運行”和“休眠”。
在實際使用中,當系統正在執行任務時,CPU 模塊電源打開,進行數據計算或者控制操作,此時晶元處於“運行”狀態;當系統處理完所有當前任務,CPU 模塊將處於一個等待的狀態,等待下一個未處理任務,這段等待時間內 CPU 處於無效工作狀態;在系統負載較輕的情況下,大部分時間內 CPU 處於無效工作狀態,如果在這段時間內關閉 CPU 的電源,將顯著地降低晶元功耗。將 CPU 模塊電源關閉,此時晶元處於“休眠”狀態,註意,在進入休眠之前,需要對晶元引腳(GPIO 的輸入輸出)進行配置,防止漏電。
巡航模式
龍芯1D支持硬體自發進行的周期性測量,稱為巡航模式。該模式下測量由硬體發起,測量結束後再喚醒軟體進行結果處理,可有效地降低電流消耗。
巡航模式下測量事件的觸發與 32.768K 時鐘產生的 1/16 秒事件同步。根據巡航的時間間隔,當 Count 寄存器的低幾位為 0,且即將加 1 時,觸發測量事件。以每秒 4 次測量為例,比較時看 Count.RTC 的最低兩位。若軟體希望使用定時器喚醒,為了不幹擾測量,最好將喚醒時間配置與測量事件錯開。
時差巡航和溫度巡航的測量事件有可能同時產生,但時差巡航優先順序高,只有測完時差,結束讀出後,測試狀態機才會接著處理溫度測量。
若測量結果長時間未被讀出,後續的巡航測量將無法開始。使用巡航模式時,軟體應當被設計成能夠及時處理測量結果。因此當出現連續兩次測量未能執行時通常意味著系統進入了異常狀態,軟體可配置 Command.WatchEn,使晶元在碰到這種情況時進行複位。
註:資料內容太多,完整資料,可到“http://bbs.16rd.com/thread-472326-1-1.html”,轉載請註明出處