Cortex-M3精通之路-2(CMSIS核心結構)

原創 云深之無跡 2023-05-28 14:45

Cortex-M3精通之路-1(匯編啟動文件)

我相信昨天的文章你一定大飽眼福了,沒關系,接下來的更精彩,也會對C語言有個全新的理解。

今天這個文件屬于CM3核心定義:有CMSIS核心的所有結構和符號

Cortex-M核心寄存器和位域,Cortex-M核心外設基址。

今天的對象在這里

先看h文件的前面幾行

根據前面三行宏定義,最終計算出的CMSIS HAL庫完整版本號為:__CM3_CMSIS_VERSION = (0x01 << 16) | 0x30 = 0x010030所以,完整的版本號為0x010030。

其中:__CM3_CMSIS_VERSION_MAIN = 0x01,主版本號為0x01__CM3_CMSIS_VERSION_SUB = 0x30,子版本號為0x30通過左移16位實現主版本號 occupies 的高16位,子版本號占低16位,然后按位或生成完整32位的版本號0x010030。

這個32位版本號包含了CMSIS HAL庫的主版本號與子版本號信息,通過該版本號,根據這三行宏定義,可以知道當前使用的CMSIS HAL庫的版本號為0x010030。其中高16位0x01表示主版本號,低16位0x30表示子版本號。

0x010030

= 0x01 * (2^16) + 0x30 * (2^0)

= 1 * 65536 + 48 * 1

= 65536 + 48

= 65680

這是轉成10進制的數字。

其中,主版本號0x01對應的10進制數為1,子版本號0x30對應的10進制數為48。

通過將主版本號的值×2^16,子版本號的值×2^0相加,我們可以得出CMSIS HAL庫完整版本號對應的10進制數65680。

這個10進制數同樣包含了主版本號1和子版本號48的信息,我們可以清楚知道當前使用的CMSIS HAL庫版本號為1.48。

1代表主版本號,48代表子版本號,兩者組合即為完整版本號1.48。

所以,總結來說,CMSIS-HAL庫的版本號0x010030

可以表示為:

Hex: 0x010030

Decimal: 65680

Version: 1.48

那不免有疑問,明明可以直接10進制文件的,為啥這么復雜呢?讓我來斗膽的分析一下。

主要有以下幾個考慮因素:

1. 兼容性:使用位運算生成的版本號格式0x010030與CMSIS HAL庫一致,這樣可以最大限度保證與庫的兼容性。

2. 擴展性:使用位運算,主版本號占高16位,子版本號占低16位,這樣主版本號可以擴展到65536,子版本號也有很高擴展空間,更利于版本的長期維護與擴展。

3. 信息包含:32位的版本號可以同時包含主版本號與子版本號,一目了然,這個信息直接清楚可見。如果只使用1.48形式,無法同時看到主子版本號的值,信息表達不夠直接。

4. 處理方便:位運算生成的版本號可以通過簡單的移位與位運算提取主版本號與子版本號的值,這在編程處理時比較方便。

5. 標準形式:0x開頭的十六進制數是MCU編程中常用的標準表達形式,使用起來比較習慣。

所以,總體來說,雖然直接使用1.48的形式更簡單直觀,但使用位運算生成0x010030格式的版本號,可以在兼容性、擴展性、信息包含以及處理方便性等方面獲得優勢,也符合編程習慣的標準表達形式。考慮到CMSIS HAL庫作為MCU的底層支撐庫,需要長期維護與迭代,所以選擇使用位運算生成版本號格式可以獲得更多優點,這可能也是CMSIS HAL庫設計者選擇這種版本號格式的主要考量因素。

接下來看這個

這段代碼主要完成了MCU內核類型與數據類型的定義。

__CORTEX_M (0x03) 此宏定義指定了內核類型為Cortex-M3,其十六進制值為0x03。

#include 此行包含stdint.h頭文件,用于定義標準數據類型,如Uint8_t、int32_t等。

#if defined(__ICCARM__) 此行條件判斷是否使用IAR編譯器,如果使用則包含intrinsics.h頭文件。

#include 此行包含intrinsics.h頭文件,該頭文件定義了IAR C/C++編譯器的內嵌匯編指令。

所以,這段代碼主要完成了兩方面的工作:

1. 通過__CORTEX_M宏定義指定了MCU使用的內核類型為Cortex-M3。2. 包含stdint.h頭文件,定義了標準的數據類型,用于MCU開發時使用。

3. 如果使用IAR編譯器,則額外包含intrinsics.h頭文件,可以使用IAR編譯器提供的內嵌匯編指令。

這段簡短的代碼定義和包含了MCU開發最基礎的信息:

1. 內核類型:我們知道目標MCU使用的內核是Cortex-M3。

2. 數據類型:通過stdint.h我們可以使用標準的數據類型,如Uint32_t等。

3. 如果使用IAR編譯器,可以使用內嵌匯編指令來優化程序。

這幾個macro是頻繁出現的,細說一下

這段代碼主要定義了中斷優先級位數和IO操作權限。

#ifndef __NVIC_PRIO_BITS

#define __NVIC_PRIO_BITS 4

#endif

這兩行定義了中斷優先級位數為4,如果__NVIC_PRIO_BITS未定義,則進行定義,否則忽略。

#ifdef __cplusplus

#define __I volatile

#else

#define __I volatile const

#endif

這幾行判斷是否使用C++編譯器,如果使用C++編譯器,__I定義為volatile,否則定義為volatile const,表示只讀屬性。

#define __O volatile

此行定義__O為volatile,表示只寫屬性。

#define __IO volatile

此行定義__IO為volatile,表示讀寫屬性。

所以,這段代碼主要完成了:

1. 如果__NVIC_PRIO_BITS未定義,則定義中斷優先級位數為4。否則忽略。

2. 根據編譯器選擇定義只讀屬性__I為volatile或volatile const。

3. 定義只寫屬性__O為volatile。

4. 定義讀寫屬性__IO為volatile。

5. 這四個屬性主要用于定義外設寄存器的訪問權限,以確保編譯器不會對訪問的代碼作優化,影響讀取的準確性。

也就是說,這段代碼為寄存器的訪問屏蔽了編譯器的優化,在編譯過程中讓編譯器明確區分:

這是一個只讀寄存器,值可能會被其他因素改變,讀取時總是獲取最新值。

這是一個只寫寄存器,每次寫入的值必須被外設接收。

這個寄存器是可讀寫的,讀取與寫入都必須準確地映射到外設。這樣可以最大限度地確保我們的程序以預期的方式使用這些寄存器,也不會因為編譯器的優化而導致意外的結果。

接下來我們看這個,知識點有點密集

中斷到中斷向量的映射

顯示了中斷(或IRQ號)如何映射到中斷寄存器和相應的CMSIS變量(每個中斷有一位)。

這段代碼定義了NVIC_Type結構體,用于表示NVIC(嵌套向量中斷控制器)的控制與狀態寄存器。

NVIC_Type結構體包含以下成員:

__IO uint32_t ISER[8]; 中斷使能置位寄存器,用于使能中斷,數組8個成員對應NVIC的8個中斷組。

__IO uint32_t ICER[8]; 中斷清除使能寄存器,用于禁止中斷,數組8個成員對應NVIC的8個中斷組。

__IO uint32_t ISPR[8]; 中斷待處理置位寄存器,用于置位某中斷的待處理標志,數組8個成員對應NVIC的8個中斷組。

__IO uint32_t ICPR[8]; 中斷待處理清除寄存器,用于清除某中斷的待處理標志,數組8個成員對應NVIC的8個中斷組。

__IO uint32_t IABR[8]; 中斷激活寄存器,指示哪些中斷被激活,數組8個成員對應NVIC的8個中斷組。

__IO uint8_t IP[240]; 中斷優先級寄存器,設置優先級,共240個成員,每個成員1字節,對應MCU中的240個中斷優先級設置。

__O uint32_t STIR; 軟件觸發中斷寄存器,用于軟件觸發指定的中斷。

所以,這個結構體包含了NVIC所有的控制與狀態寄存器,通過這些寄存器,我們可以完成:

1. 中斷使能與失能設置。

2. 中斷待處理標志的置位與清除。

3. 檢測哪些中斷被激活。

4. 設置各個中斷的優先級。

5. 軟件觸發某個指定的中斷。

簡單來說,這個結構體高度抽象和集成地代表了NVIC及其所有的功能與控制寄存器,使用時直接通過相應的成員來操作寄存器。

這個NVIC_Type結構體代表的不是某個具體的存儲區域,而是概念性地將NVIC所有的寄存器集成在一個結構體中,以方便我們管理和訪問這些寄存器。
結構體中的每個成員,如__IO uint32_t ISER[8]都代表NVIC中的一個實際的32位寄存器。
這些寄存器的地址在MCU的外設地址映射中已經固定,結構體將它們邏輯上集成在一起,方便我們按功能管理和訪問。
所以,當我們需要操作NVIC使能某個中斷時,只需要像下面這樣使用ISER成員:

NVIC->ISER[2]?|=?(1?<5
);?//?使能中斷組2中的第6個中
這行代碼通過NVIC結構體操作寄存器,而ISER[2]則映射到NVIC使能寄存器組2實際的物理地址。

在MDK或IAR等IDE中,這些寄存器的具體地址將在外設地址映射Memap窗口中顯示。

例如,ISER[2]可能映射到0xE000E200這樣的實際地址,這個地址上的32位寄存器包含對應的位用于使能第6個中斷。

所以,總結來說:
1. NVIC_Type 結構體邏輯上將NVIC的所有寄存器集成在一起,方便管理和訪問,但本身不代表實際的存儲區域。
2. 結構體中的每個成員代表NVIC中的一個實際物理寄存器,映射到固定的地址。
3. 我們通過結構體操作這些寄存器,然后編譯器會將其映射到實際的物理地址上。
4. 這些寄存器的具體地址將在MCU的外設地址映射中指定,我們可以在IDE的Memap窗口中查看。
5. 所以結構體更像是一個邏輯上的抽象,將NVIC的寄存器方便地集成在一起,在程序中按功能管理和訪問。

更多詳細的內容得看這個

嵌套中斷矢量控制器

Cortex?-M3 NVIC寄存器的CMSIS映射為了提高軟件效率,CMSIS簡化了NVIC寄存器的表示。

在CMSIS中:Set-enable, Clear-enable, Set-pending, Clear-pending和Active Bit寄存器映射到32位整數數組,因此:

看這個IS,IC,下面就不放了

數組ISER[O] ~ ISER[2]對應寄存器ISERO-ISER2,

數組ICER[O] ~ ICER[2]對應寄存器ICERO-ICER2,

數組ISPR[0] ~ ISPR[2]對應寄存器ISPRO-ISPR2,

數組ICPR[O] ~ ICPR[2]對應寄存器ICPRO-ICPR2,

數組IABR[O] ~ IABR[2]對應寄存器IABRO-IABR2。

中斷優先級寄存器的8位字段映射到一個8位整數數組,因此數組IP[O]到IP[67]對應于寄存器IPRO-IPR67,數組]條目IP[n]保持中斷n的中斷優先級。

CMSIS提供線程安全的代碼,提供對中斷優先級寄存器的原子訪問。

我繼續說更多的細節,__IO uint32_t ISER[8];比如這種寫法前面的__IO 是干嘛用的?我來解釋一下,看不懂的應該是沒學過C。

__IO的定義如下:

#define __IO volatile

它被定義為volatile,意味著ISER[8]成員所代表的寄存器是一個讀寫寄存器。

所以,__IO的作用是:

1.通知編譯器ISER[8]成員所對應寄存器的讀寫屬性,是可讀可寫的。

2.阻止編譯器對讀寫這些寄存器的代碼做優化。因為這些寄存器的值可能會被其他因素改變,每次讀寫的值必須準確對應于寄存器的當前值。如果不使用__IO對其進行修飾,編譯器在編譯過程中可能會對訪問這些寄存器的代碼作優化,這會導致我們讀到的值不是寄存器的真實值,產生意外的后果。

所以,__IO關鍵字通過定義為volatile,告訴編譯器:

1. ISER[8]成員代表的寄存器是可讀可寫的。

2. 每次讀取該寄存器必須從外設獲取最新值,寫入時必須將新值準確寫入外設。

3. 編譯器在編譯過程中不得對其進行任何優化。

簡單來說,__IO關鍵字修飾uint32_t ISER[8]成員,目的是通知編譯器其對應的寄存器屬性和訪問要求,進而阻止編譯器的優化,確保我們的程序以預期的方式正確訪問這些寄存器。這有利于我們編寫的代碼正常工作,不會因為編譯器的優化引入意外的副作用,訪問寄存器時總是獲取最新的準確值。

說完了嗎?還沒有,我還想bibi幾句:

在C語言中,__IO這樣在標識符(如結構體成員名)前面加上的關鍵字被稱為修飾符(qualifier)。修飾符的作用是為標識符添加某種屬性或額外的語義。__IO 就是一個典型的修飾符例子,它被用來表示標識符代表的是一個讀寫寄存器,并禁止編譯器對其優化。

所以,__IO 在這里相當于一個寄存器的修飾符,為其添加讀寫以及volatile 的屬性。

在C語言中,常見的修飾符還有:

1.const:常量修飾符,用于表示標識符是一個常量。

2.volatile:指示值可能會被其他因素改變的修飾符,告訴編譯器每次讀取該值必須重新從內存中獲取。

3.restrict:表示某指針是唯一訪問某塊內存的手段,可以用來提高效率。

4.inline:表示該函數是內聯函數,由編譯器直接將函數體插入調用處。

5. extern:表示該標識符(如變量或函數)的定義在其他地方,extern int a;

所以,總結來說:

1.修飾符是放在標識符(如變量名、函數名、結構體成員名)前面的關鍵字。2.修飾符的作用是為標識符添加某種屬性或語義。

3.__IO 是作為寄存器修飾符使用的,表示寄存器是可讀寫的,并禁止編譯器對其優化。

4.const、volatile、restrict、inline、extern都是常見的修飾符,用來表示常量性、值變化、函數內聯等屬性。

5.使用修飾符可以為程序添加重要的額外信息,引導編譯器作出正確的處理。

再擴展一些,這個東西可以在函數上面用嗎?我這里先噴,以前不懂這個群里面問半天,結果都雞兒半桶水,讓我寫什么程序自己實驗,真心累啊。

在C語言中修飾符也可以用于修飾函數。

常見的用于修飾函數的修飾符有:
1. inline:表示該函數是內聯函數,主要作用是鼓勵編譯器將函數體直接插入所有調用點,以減少函數調用的開銷。
2. extern:表示該函數的定義在其他地方,用于函數前向聲明。例如:
inline void func1() { ... } // 內聯函數
extern void func2(); // 函數前向聲明
void func2() { ... } // 函數定義
在這個例子中:
func1被inline修飾,表示其是一個內聯函數,編譯器可以選擇將其函數體插入調用處。
func2首先被extern修飾,進行前向聲明,然后給出函數定義。

另外,static、volatile 等修飾符也可以用于修飾函數,區別如下:
static:static修飾的函數只在定義它的文件內可見,表示私有函數。
volatile:volatile修飾的函數其地址可能改變,每次調用時必須從內存中獲取最新地址。

主要用于嵌入式中斷函數等。所以,總結來說:

1.C語言中的修飾符不僅可以用于修飾變量,也可以用于修飾函數。
2.常見的用于修飾函數的修飾符有inline、extern、static、volatile等。3.inline表示內聯函數,extern表示函數前向聲明,static表示私有函數,volatile表示地址可能改變的函數。
4.使用修飾符可以為函數添加額外的屬性和語義,引導編譯器生成我們期望的代碼,這在優化程序性能方面具有很好的作用。

那我在這個函數前面就放一個用宏定義的修飾符,宏什么都不定義。這個會報錯了,一定要記住程序是最確定的東西。

#define __MY_MODIFIER

__MY_MODIFIER void func() { ... }

這里的__MY_MODIFIER宏未進行任何定義,所以編譯器并不知道它表示什么屬性或語義。在編譯這個代碼時,編譯器會報類似下面的錯誤:undefined identifier '__MY_MODIFIER'這是因為編譯器并不識別__MY_MODIFIER這個未定義標識符,所以不明白它作為函數修飾符的作用,這會導致編譯錯誤。要使用我們自己定義的修飾符,需要為其給出明確的定義,例如:

#define __MY_MODIFIER static ?

__MY_MODIFIER void func() { ... }

這里我們定義__MY_MODIFIER為static,這樣編譯器就能理解其作用,并將func函數定義為靜態的。所以,總結來說:1. 若要使用自定義的修飾符,必須為其給出明確的定義,否則編譯器無法理解其作用,會報錯。2.自定義修飾符的定義可以通過#define來實現,例如#define __MY_MODIFIER static。?3. 定義后,修飾符可以用于修飾變量、函數等,編譯器會根據其定義來理解其修飾的作用。4. 未定義的修飾符會導致編譯錯誤,因為編譯器不知道如何處理這個未知的標識符。?5. 自定義修飾符的一個重要應用就是,當標準修飾符無法滿足需要時,我們可以定義自己的修飾符來擴展語言和表達程序語義。

對于這個中斷的寄存器就是這些,不要陷入太深,繼續往下看

系統控制塊(SCB)系統控制塊(System control block, SCB)提供系統實現信息和系統控制。這包括系統異常的配置、控制和報告。

Cortex-M3 SCB寄存器的CMSIS映射為了提高軟件效率,CMSIS簡化了SCB寄存器的表示。

在CMSIS中,字節數組SHP[0]到SHP[12]對應寄存器SHPR1-SHPR3。

接著就是這個了

這個結構體定義了SCB(系統控制塊)的寄存器集。SCB模塊是Cortex-M內核的一部分,用于系統控制與配置。

SCB_Type 結構體包含以下主要成員:

__I uint32_t CPUID; CPUID寄存器,包含設備ID和修訂信息。

__IO uint32_t ICSR; 中斷控制狀態寄存器,用于中斷使能、優先級設置和掛起狀態控制。

__IO uint32_t VTOR; 向量表偏移寄存器,配置中斷/異常向量表的位置和偏移。

__IO uint32_t AIRCR; 應用中斷/復位控制寄存器,用于配置中斷優先級組和系統復位。

__IO uint32_t SCR; 系統控制寄存器,用于配置中斷優先級組、SLEEPDEEP位等。

__IO uint32_t CCR; 配置控制寄存器,用于配置存儲器mapped模式和無效指令報告位。

__IO uint8_t SHP[12]; 系統句柄程序優先級寄存器,設置不同異常的優先級。

__IO uint32_t SHCSR; 系統句柄控制和狀態寄存器,報告不同異常的掛起和激活狀態。

CFSR、HFSR、DFSR; 可配置故障狀態寄存器,用于報告各種故障和異常的狀態。

MMFAR、BFAR;內存錯誤和總線故障地址寄存器,報告相關故障的地址。PFR、DFR、ADR; 寄存器用于報告處理器特征、調試功和輔助功能。MMFR、ISAR; 寄存器用于報告內存模型和指令集架構的特征。

所以,SCB_Type結構體包含SCB模塊所有的控制/狀態寄存器和ID寄存器,通過這些寄存器我們可以完成:

1. 中斷控制(使能/禁止)和優先級設置。

2. 配置向量表位置和系統復位。

3. 設置不同異常的優先級別。

4. 獲取設備ID、內核修訂版本以及各種特征信息。

5. 獲取并處理不同類型的故障和異常。

6. 配置系統控制位,如SLEEPDEEP。

接下來定義的是這樣的東西,本來這種細節的東西就不寫了,但是為了精通這個小目標是要寫的。

上面這個代碼可能看起來有點懵逼,這里其實都是底層的寄存器,不妨去看看這個:

這個就是對應的寄存器布局,我們只是想知道里面是啥而已

這些宏定義用于讀取SCB->CPUID寄存器中的設備ID和修訂信息。其中:SCB_CPUID_IMPLEMENTER_Pos和SCB_CPUID_IMPLEMENTER_Msk用于讀取IMPLEMENTER字段,該字段包含CPU的制造商ID。SCB_CPUID_VARIANT_Pos和SCB_CPUID_VARIANT_Msk用于讀取VARIANT字段,該字段包含CPU的變體編號。SCB_CPUID_PARTNO_Pos和SCB_CPUID_PARTNO_Msk用于讀取PARTNO字段,該字段包含CPU的具體型號。SCB_CPUID_REVISION_Pos和SCB_CPUID_REVISION_Msk用于讀取REVISION字段,該字段包含CPU的修訂版本。所以,通過這些宏,我們可以從SCB->CPUID寄存器中提取關鍵的設備信息:制造商ID:

uint32_t implementer = (SCB->CPUID & SCB_CPUID_IMPLEMENTER_Msk) >> SCB_CPUID_IMPLEMENTER_Pos;

變體編號:

uint32_t variant = (SCB->CPUID & SCB_CPUID_VARIANT_Msk) >> SCB_CPUID_VARIANT_Pos;

CPU型號:

uint32_t partNo = (SCB->CPUID & SCB_CPUID_PARTNO_Msk) >> SCB_CPUID_PARTNO_Pos;

CPU修訂版本:

uint32_t revision = (SCB->CPUID & SCB_CPUID_REVISION_Msk) >> SCB_CPUID_REVISION_Pos;

ARM Cortex-M內核的CPUID寄存器包含這些關鍵字段,方便識別和區分不同的芯片,并獲取其精確的型號與修訂信息。宏定義極大地簡化提取這些信息的過程,只需要通過位域操作和移位就可以獲得所需要的ID參數,這在很大程度上增強了代碼的可讀性。

不在乎含義,在乎寫法,接下來看寫法

SCB_CPUID_IMPLEMENTER_Pos代表:

IMPLEMENTER字段在CPUID寄存器中的起始位置(偏移),其值為24。

SCB_CPUID_IMPLEMENTER_Msk代表:

IMPLEMENTER字段的掩碼,通過將0xFF左移24位得到,其值為0xFF000000。所以,要讀取IMPLEMENTER字段,我們可以像下面這樣使用這兩個宏:

uint32_t implementer = (SCB->CPUID & SCB_CPUID_IMPLEMENTER_Msk) >> SCB_CPUID_IMPLEMENTER_Pos;

該語句通過與SCB_CPUID_IMPLEMENTER_Msk的位與操作獲取IMPLEMENTER字段,然后右移SCB_CPUID_IMPLEMENTER_Pos(24)位,將其移到最低8位,obtaining the implementer code.

例如,如果CPUID的值為0x410FC241,那么:SCB->CPUID = 0x410FC241???
SCB_CPUID_IMPLEMENTER_Msk = 0xFF000000
通過與操作:0x410FC241 & 0xFF000000 = 0x41000000
右移24位:0x41000000 >> 24 = 0x41 = 65(十進制)所以,IMPLEMENTER字段的值為65(十進制),表示CPU的制造商是ARM。位域操作通過掩碼獲取目標字段,位移則將其移到需要的位置。



位域和位移都是位運算的概念,用于在二進制位級別操作和訪問數據。位域操作用于在一個數據域(如寄存器)的不同位上訪問多個字段。它通過掩碼來選擇和操作目標字段中的位。

常用的位域操作有:與(&):如果兩個操作數的對應比特位都是1,則該位的結果為1,否則為0。用于選取目標字段。或(|):只要兩個操作數的對應比特位有一個為1,則該位的結果為1。用于修改或設置字段的值。非(~) :反轉操作數的每一位,0變1,1變0。用于對字段取反。?

位移則用于將數據的位向左或向右移動給定的位數,實際上是在給定方向上對數據的表示形式進行擴展或截斷。

按方向分為:左移(<<):向左移動,低位補0,用于擴展數據類型或實現乘法。右移(>>):向右移動,根據數據類型,高位或補0或補符號位,用于縮小數據類型或實現除法。?

所以,要訪問SCB->CPUID寄存器的不同字段,我們可以:1.使用與操作和掩碼獲取目標字段,例如用SCB_CPUID_IMPLEMENTER_Msk獲取IMPLEMENTER字段。2.必要時使用位移將字段移到需要的位置,例如用SCB_CPUID_IMPLEMENTER_Pos右移24位將IMPLEMENTER移到低8位。3.組合位域操作讀取和修改字段。例如用或操作將某位設置為1,用與操作清0某位。

例如,要讀取CPUID的IMPLEMENTER字段:

uint32_t implementer = (SCB->CPUID & SCB_CPUID_IMPLEMENTER_Msk) >> SCB_CPUID_IMPLEMENTER_Pos;

要設置CPUID的REVISION字段的第3位:

SCB->CPUID |= (1 << 3); // 用或操作將第3位設置為1

要清CPUID的VARIANT字段的低4位:

SCB->CPUID &= ~((0xF) << SCB_CPUID_VARIANT_Pos); // 用與操作和反碼清除低4位


繼續放大鏡看這個代碼,我們看這個1ul的定義方式:

1ul

1ul是一個無符號長整型(unsigned long)常量,其值為1。在C語言中,整型常量的默認類型為int,但可以通過后綴來指定不同的類型。常見的后綴有:無符號(unsigned):- u或U:無符號整型,如1u
- ul或UL:無符號長整型,如1ul長整型(long):- l或L:長整型,如1l無符號長整型(unsigned long):- ul或UL:無符號長整型,如1ul大小寫無關,所以1u、1ul、1U和1UL都是等價的。

使用這些后綴的主要目的是為了在某些情況下指定常量的精確類型,避免由默認類型帶來的怪異行為。例如,在32位系統上,int和unsigned int都是32位,所以1和1u的值相同。
但long可能是32位,而unsigned long是64位,所以1l和1ul的值會不同。所以,當我們需要一個無符號的32/64位整型常量時,就可以使用1u或1ul來指定其精確類型,這可以避免一些潛在的問題。

另外,這些后綴也常用于定義寄存器和位域的掩碼常量,例如:

#define UART_DATA_MASK   0xFFul     // 8位無符號數據掩碼  
#define UART_PARITY_MASK 0x01ul // 1位無符號奇偶校驗位掩碼

這里使用ul是為了確保掩碼常量被定義為32位,與寄存器大小一致。所以,總結來說:1. 1ul是一個無符號長整型常量,其值為1。2. 后綴u、ul、U和UL用于定義無符號整型和無符號長整型常量。3. 使用這些后綴可以指定常量的精確類型,避免默認類型帶來的問題。4. 這些后綴常用于定義寄存器和位域的掩碼常量,確保其大小與目標寄存器一致。

這個結構體定義了SysTick定時器的寄存器集。SysTick是Cortex-M內核的一部分,用于生成定時中斷和延時。

SysTick_Type結構體包含以下成員:

__IO uint32_t CTRL; SysTick控制和狀態寄存器,用于使能SysTick定時器,選擇時鐘源和計數模式。

__IO uint32_t LOAD; SysTick重載值寄存器,設置SysTick定時器的重載值,該值決定定時周期。

__IO uint32_t VAL; SysTick當前值寄存器,在運行過程中存儲SysTick定時器的當前值。

__I uint32_t CALIB; SysTick校準值寄存器,提供設備特定的時鐘頻率信息,用于計算延時。

所以,通過這個結構體,我們可以訪問SysTick定時器的所有控制/狀態寄存器和校準寄存器,并完成:

1. 使能或關閉SysTick定時器。

2. 選擇SysTick的時鐘源,如內核時鐘AHB或外部參考時鐘。

3. 選擇遞減計數模式或遞增計數模式。

4.設置SysTick定時器的重載值,配置其定時周期。

5.讀取當前的計數值VAL。

6.獲取設備的時鐘頻率信息CALIB,用于生成精確延時。

7.SysTick定時器溢出時產生中斷,所以也用作系統的節拍定時器。

SysTicktimer(STK)處理器有一個24位系統計時器SysTick,它從重新加載值開始計數到零,在下一個時鐘邊緣重新加載(封裝到)LOAD寄存器中的值,然后在隨后的時鐘上計數。當處理器停止調試時,計數器不會減少。

再詳細一些介紹這個:

1.最大計數值為24位,所以最大延時為16777216個時鐘周期。

2.可以選擇內核時鐘AHB或外部參考時鐘作為時鐘源。

3.可以選擇遞增計數模式或遞減計數模式。

4.重載值寄存器LOAD用于設置定時周期,每次定時器溢出時重新裝載該值。

5.當前值寄存器VAL存儲定時器的實時計數值。

6.定時器溢出時觸發SysTick異常請求,可以配置為產生中斷。

7.時鐘頻率預分頻因子固定為8,不可配置。

8. 中斷優先級固定為最低級別,僅可屏蔽但不可修改。

9.包含一設備特定的校準寄存器,提供系統時鐘頻率信息,用于實現準確延時。基

于以上特性,我們可以這樣配置和使用SysTick定時器:

1.使能SysTick定時器,選擇AHB時鐘源。

2.配置 SysTick_LOAD寄存器為重載值(如1000),每1000個時鐘周期產生一個中斷。

3.等待SysTick定時器中斷,并在中斷服務程序內進行任務調度或其他定時任務。

4.獲取SysTick_CALIB的值,例如0x0320,表明每個時鐘周期大約為30.5us。

5.要延時100ms,計算需要的時鐘周期數:100ms / 30.5us = 3276。寫入SysTick_LOAD,使能定時器。

6.等待SysTick定時器中斷,表示延時完成。

所以,SysTick模塊為Cortex-M3內核提供了一個簡單而高效的定時器,可用于RTOS的任務調度、軟件延時和其他定時事件。它的24位計數器和微秒級精度可以滿足大多數應用的需要。

和其它的定時器外設比較有什么區別?

SysTick定時器有以下主要用途:

1.提供系統節拍定時器,用于RTOS的任務調度。RTOS可以配置SysTick產生中斷,并在中斷處理程序中進行任務切換。

2.實現軟件延時。我們可以根據SysTick的定時周期計算需要的計數值來生成所需延時。

3.其他定時事件。SysTick定時器可以用于系統的各種定時任務,如定時監測、看門狗喂狗等。

與其他定時器外設相比,SysTick定時器有以下區別:

1.SysTick定時器是Cortex-M內核的一部分,而其他定時器屬于MCU的外設。所以SysTick定時器更輕量,通用性更強。

2.SysTick定時器的時鐘源只能選擇內核時鐘或外部參考時鐘,而其他定時器通常有更多時鐘源選擇。

3.SysTick定時器的計數器只有24位,范圍更小。其他定時器的計數器可以達32位或更高。

4.SysTick定時器的中斷優先級固定為最低,無法配置。其他定時器的中斷通常可以配置優先級。

5.SysTick定時器只有比較基本的控制寄存器,更簡單。其他定時器通常具有更豐富的控制與配置選項。

6.SysTick定時器的溢出事件只能產生中斷,無法產生DMA請求等。部分定時器可以通過多種方式響應溢出事件。

讓我來說下這個計數模式:

遞增計數模式和遞減計數模式是定時器的兩種不同的計數方式:

遞增計數模式:定時器的計數器從初始值(通常為0)開始遞增,當計數器達到重載值時,定時器溢出。然后計數器重載為初始值,重新開始遞增。如果配置為產生中斷,則在計數器達到重載值時觸發中斷。

例如,如果初始值為0,重載值為100,則計數序列為:

0, 1, 2, 3, ... 98, 99, 100 - 觸發中斷 - 0, 1, 2, 3 ...

遞減計數模式:

定時器的計數器從重載值開始遞減,當計數器達到0時,定時器溢出。然后計數器重載為重載值,重新開始遞減。如果配置為產生中斷,則在計數器達到0時觸發中斷。

例如,如果重載值為100,則計數序列為:

100, 99, 98, 97 ... 3, 2, 1, 0 - 觸發中斷 - 100, 99, 98 ...

所以,主要差異在于計數器的初始值和溢出條件不同:

遞增模式:

初始值:通常為0

溢出條件:計數器達到重載值

遞減模式:

初始值:等于重載值

溢出條件:計數器達到0

讓我們來探究一下這個設計意圖,就是定時器的設計意圖。

1.適應開發者的習慣。有的開發者更習慣從0開始遞增計數,有的更習慣從最大值開始遞減計數,所以提供兩種模式以滿足不同習慣。

2.方便實現定時器的溢出中斷。無論是遞增模式從0溢出到重載值,還是遞減模式從重載值溢出到0,都可以很簡單地通過比較計數器與重載值/0來檢測溢出事件并產生中斷。

3.擴展定時范圍。24位的定時器,遞增模式下最大延時為2^24個周期,若選擇遞減模式,最大延時可擴展為2^24 + 重載值個周期,所以可獲得較大的定時范圍。

4. 不同模式下的溢出事件可用于不同用途。例如,可以選擇遞增模式用于周期性中斷,而選擇遞減模式用于超時檢測。兩種事件可以同時使用,擴展定時器的應用。

5. 簡化硬件設計。提供兩種模式而非只有一種,可以在軟件中通過配置來選擇模式,而不需要硬件支持兩套完全不同的定時與計數邏輯,簡化了定時器模塊的設計。

接下來說這個設計上面的簡便性,這個就比較深奧了,之后我如果把玩FPGA我會寫詳細的。

如果SysTick定時器僅支持遞增模式或遞減模式中的一種,則其硬件結構可以簡單設計為:

- 24位計數器寄存器

- 24位重載寄存器

- 比較邏輯,比較計數器與重載寄存器,產生溢出事件

但是,為了支持兩種模式,SysTick定時器的硬件結構可以設計為:

- 24位計數器寄存器

- 24位重載寄存器

- 1位遞增/遞減模式選擇位

- 比較邏輯,當模式選擇位選擇遞增模式時,比較計數器與重載寄存,當選擇遞減模式時, 比較計數器與0,以產生溢出事件。

可以看到,僅添加一個1位的模式選擇邏輯,SysTick定時器就可以支持兩種模式,而不需要實現兩套完全獨立的計數/比較邏輯。在軟件層面,我們只需要設置MODE位為0選擇遞增模式,設置為1選擇遞減模式,然后處理溢出事件中斷即可。

硬件層面已經為兩種模式實現了統一的定時邏輯。可以想象,如果定時器需要同時支持4種或更多種模式,僅靠硬件實現各自獨立的定時機制會變得非常復雜。

而采用類似SysTick的方式,通過軟件配置選擇定時模式,硬件只需實現一套相對通用的定時機制,這無疑可以大大簡化定時器模塊的設計


評論
  • 在前六期中,我們已經分別討論了 CRA 的適用范圍、整體影響、漏洞通報義務、風險評估與技術文檔證據鏈、第三方組件與 SBOM 供應鏈治理,以及產品上市后的支持期、安全更新、用戶說明和終止支持管理。到這里,企業已經能夠回答幾個核心問題:產品是否落入 CRA 適用范圍,產品由哪些組件構成,企業如何證明自己在設計、開發和上市前采取了必要的安全措施,以及產品上市后如何持續維護和安全下線。但對于真正準備落地 CRA 合規的企業來說,還有一個更現實的問題:CRA 的法規條文相對原則化,企業應當如何把“網絡安
    虹科云科技 2026-08-03 16:51 182207瀏覽
  • 在物聯網從“萬物互聯”邁向“萬物智聯”的進程中,LTE Cat.1憑借其在速率、成本與網絡覆蓋之間的完美平衡,正成為中低速物聯網市場的絕對主力。隨著2G/3G網絡的逐步退網以及新國標對終端設備智能化、定位功能的強制要求,Cat.1模組迎來了爆發式的增長窗口。在這一關鍵節點,基于華為海思Hi2131芯片設計的LTE Cat.1模組,憑借其在能效、射頻、架構及物理規格上的底層創新,成功打破了“高性能必高功耗”的傳統魔咒,為行業提供了極具競爭力的連接最優解。核心技術優勢:重塑Cat.1能效與連接標桿海
    用戶1778981989717 2026-08-05 21:04 177瀏覽
  •        很多人只見過封裝在SMD外殼里的小尺寸晶振,卻不知道一顆2016、1612甚至1210封裝的微型石英晶振,從一塊巴掌大的石英原礦,到最終能穩定起振的成品,要經過十幾道精密工序。它內部的石英晶片厚度最薄不到20微米,比普通A4紙的1/5還薄,整個生產過程里哪怕0.1微米的誤差,都會直接廢掉整批產品,這也是小尺寸晶振過去長期依賴進口,國內廠商花了十幾年才啃下量產硬骨頭的核心原因。1. 原石定向切割:0.01度的角度誤差都不能有小尺寸晶振的第一步,
    TKD泰晶科技 2026-08-07 08:43 400瀏覽
  •                                                                        
    廣州鐵金剛 2026-08-06 17:44 133149瀏覽
  • 導語在現代高速數字電路設計中,信號的完整性已不僅是理想波形推演,而是一場與物理非理想特性正面博弈的工程實踐。濾波器芯片作為凈化傳輸鏈路的關鍵屏障,其核心挑戰在于:能否有效識別并濾除那些隱匿在電平跳變過程中的亞納秒級瞬態脈沖干擾,這類干擾持續極短,卻足以在高速鏈路中引發誤觸發。然而,傳統函數發生器受限于采樣率與邊沿速率,根本無法忠實復現如此狹窄且陡峭的異常波形。針對此困境,德思特TS-AWG7000系列任意波形發生器以17 GS/s采樣率與50 ps原生邊沿速度,為瞬態脈沖提供精細刻畫,配合SPG
    德思特測試測量 2026-08-05 14:06 5瀏覽
  • ?摘要:低價大流量卡正全面退市,政策收緊已成定局。面對傳統號卡的不確定性,隨身WiFi憑借穩定連接、多設備共享、獨立設備和靈活套餐等優勢,成為務實可靠的備選方案。1、流量卡黃金時代要結束了通信行業正迎來一場前所未有的“地震式”調整——曾讓無數用戶追捧的低價大流量卡,正在全速退出各大平臺。這早已不是一次普通的競合,而是一場趨勢性的行業洗牌。回望過去,19元200G的神卡,那時真是“睡著都能笑醒”,便宜到不敢相信,爽到忍不住炫耀。那些日子,好像隨便刷、隨便看,流量自由觸手可及。可如今,回頭再看,那種
    愛上電路設計 2026-08-03 10:21 128903瀏覽
  • 做藍牙音箱的工程師大概都碰過這個局面。產品要連手機放歌,要本地播開機提示音和按鍵音,還要接 App 做配網和狀態上報。三件事拆開,早先的常規做法是音頻藍牙一顆料、數傳藍牙一顆料、本地播放再掛一顆小 MCU 加一片 Flash。板子越畫越大,BOM 越算越貴,待機電流和固件工作量也跟著漲。WT2605C 出來以后,這套需求可以集成到一顆芯片,就是 WT2605C-32N,該芯片采用QFN32 封裝,4×4 毫米,把音頻藍牙、BLE 數傳和 MP3 本地播放三樣全包了。對藍牙音箱來說,最實在的好處就
    唯創知音語音芯片 2026-08-06 15:14 298瀏覽
  • 摘要防爆自控系統同時布設本安信號、工業總線、動力供電三類線路,僅依靠標識標牌管控插接極易出現人為錯插問題,高壓動力回路竄入本安弱電回路會突破安全柵限能標準,產生點火風險。依托 A、D、K 標準化機械防呆編碼體系,搭配護套顏色區分管理,適配 3 針 3 孔免焊接冷壓增安型防爆航插、5PIN 總線防爆航空插頭、8 芯焊接防爆法蘭插座的選型使用,從物理結構層面杜絕防爆接近開關連接器、防爆傳感器航插接頭混用插接問題,補齊防爆系統被動安全防護體系。關鍵詞圓形防爆連接器,防呆編碼防爆航插,防爆航空插頭,防爆
    kyfbest科迎法電氣 2026-07-31 18:29 417瀏覽
  • 智能寵物用品這幾年快速普及,自動清理幾乎成了智能貓砂盆的標配。貓咪用完離場,設備自動翻轉清理,養寵家庭省去了每天彎腰清理的麻煩。但自動清理的第一步,是先準確判斷貓到底在不在盆里。這個看似簡單的問題,在小空間里并不容易做好。近場檢測的痛點:距離太遠反而誤事貓砂盆內部空間有限。如果傳感器的檢測距離設得偏大,盆外路過的貓、人甚至物品都會被誤判為貓在盆內,結果該清理時不清理、不該清理時亂清理,體驗直接崩壞。這類產品的核心訴求其實就一句話:近距離、小范圍、精準識別,不能有半點誤判。常規感應方案常因檢測距離
    唯創知音語音芯片 2026-07-31 16:51 313瀏覽
  • 文:杜杰編輯:侯煜當地時間7月28日,美國特朗普政府落地最新科技封鎖政策,美國聯邦通信委員會(FCC)正式更新《受管制清單》,新增兩大類設備——境外生產的先進機器人設備、境外生產的聯網電力逆變器。FCC在官方情況說明書中明確,該類境外制造產品,“會對美國國家安全或美國民眾的人身安全構成無法承受的風險”。本次新規設置明確豁免機制:經美國國防部(DoW)、電力逆變器品類經美國國土安全部(DHS)審核并授予“有條件批準”,認定對應設備品類不存在重大安全風險,即可獲得準入豁免。同時政策嚴格執行新老劃斷原
    華爾街科技眼 2026-08-03 21:28 336瀏覽
  •     長期專注WiFi領域,也算是行業老兵了!同行閑聊中,時不時能提起我和我們!從疫情起,國產替代風生水起,起起落落,大浪淘沙,生存下來的都是強者!    WiFi模塊應用廣泛,對于高端市場和特定市場,要求WIFI模塊需要過CE/FCC之類的認證,也就是說沒有認證的模塊,不具備導入產品設計.接下來就和大家聊聊認證模塊選型參考!    WIFi模塊硬件方面主要考慮以下九點特性:    1
    納拓科技 2026-07-31 17:56 277瀏覽
  • 摘要在防爆電氣設計中,只參照芯數選型而忽略額定載流量,長期滿負荷運行會出現插頭發熱、接觸面氧化、IP67 密封受熱老化等問題。結合常用 3 針 3 孔、4 芯、5PIN、8PIN 圓形防爆連接器,制作分級電流參數對照表,區分冷壓免焊接、焊接兩種接線結構的安全載流數值,設置合理電流冗余系數,搭配使用環境修正參數,規范防爆接近開關連接器、防爆法蘭插座的選型計算方式。關鍵詞圓形防爆連接器,載流參數表,防爆法蘭插座,防爆端子接頭,IP67 防爆防水接插件1 產品概述圓形防爆連接器觸點載流能力由插針直徑、
    kyfbest科迎法電氣 2026-08-03 09:18 128658瀏覽
  • 在EMC測試過程中,傳導發射(Conducted Emission,CE)超標是工程師最常遇到的問題之一。更令人頭疼的是,同樣的超標曲線背后,可能對應著完全不同的干擾機理:有的是差模噪聲沿電源回路傳播,有的是共模電流通過寄生路徑耦合,還有些問題甚至并非來自電源本身,而是負載、電纜布局或接地結構引起的連鎖反應。 · 150kHz~1MHz 超標:多為差模噪聲為主,干擾沿火線-零線回路傳輸。 · 1MHz~30MHz 超標:通常共模噪聲占主導,干擾通過火線/零線對地回路傳播。 如果條件允許,用電流探
    譽磁電磁兼容EMC 2026-07-31 18:45 516瀏覽
  • 產品使用18V供電,配套4串鋰離子電池,需要設計一個充電器。因為輸入18V,電池最高 16.8V,壓差僅 1.2V。因為壓差太小。使用開關型的充電控制芯片不穩定。嘗試自行設計一個。整體采用分立三極管 + TL431架構,分4個功能單元:使能控制回路、限流環路、TL431 精密恒壓反饋環路、PNP 功率管主功率輸出回路;實現完整鋰電池充電邏輯。使能控制回路按鍵按下:5V 電壓經 R12 (2kΩ) 送入 NPN 管 Q3 基極,Q3 飽和導通,對地拉低 R1、R2 組成的分壓控制節點電位;該節點直
    southcreek 2026-08-07 13:45 353瀏覽
我要評論
0
點擊右上角,分享到朋友圈 我知道啦
請使用瀏覽器分享功能 我知道啦
主站蜘蛛池模板: 三年成全影视大全免费播出| 繁花沪语版| 洗衣歌原唱| 许双军案是啥情况呀| 《花子vs倔强驱魔师》真人版电影 | 新员工韩国| 鸡宝厨房| 妈妈的职业5完整版结局在线看谁演的| 班杰明现状| 小羊肖恩第二部| 银瓶梅电视剧免费观看| 《模特》电影完整版| 黑白配高清在线观看免费观看| 赵露思许我耀眼电视剧免费观看| 给我一支烟 歌词| 欧式少女全集高清版观看视频在线 | 依然闪亮未删减| 需要爸爸种子-在线追剧| 匆匆的青春电视剧免费观看| 四少妇按摩记2| 黑帮老大和我的356日在线观看 | 电视剧五十玫瑰| 哲仁王后 电视剧| 啄木鸟:女版《壮志凌云》音译成中文| 成龙历险记第四季| 妈妈的学生中字ID木鱼天| 美剧黑帆第一季未删减版| 越南姑娘MV高清免费| 爱我几何电影完整版高清免费观看 | 反抗之真心英雄剧情| 请回答1988在线观看| 金银悔10全免费播放| 宋小宝最新小品全集| 混血儿的摇篮| 周迅画皮1电影免费高清在线观看| 两个人的世界全集免费观看完整版| 双女任务在线观看| 格里高利教皇合唱团| 坎贝奇《品味人生》播放影视大全在 | 宝宝出虚汗| 忍者神龟87版| 暴躁老妈全集免费观看高清版| 玉女心经2| 维修空调电影| 泡沫之夏电视剧结局| 《我是刑警》电视剧第14集| 需要爸爸的种子在线播放| 武汉市| 我的邻居正在付出一切党整版| 盛唐风流手机在线观看| 迪奥特曼全集| 刘赛望月| 斗罗大陆 免费完整版| 疯狂特警队免费观看完整版| 晋中市| 爱情有烟火全集免费观看| 色天使TV| 浪漫玛丽国语版全集| 想要爸爸播种子在线观看| 陆小凤传奇4| 家有虎妻| 鸳鸯村的故事| 初恋这件事国语版| 《插曲的痛》| 高清《宇宙面包店》电视剧| 《特殊的治疗》李采潭在线| 整蛊专家3| 姐妹5高清韩剧播放| 高清在韩国成为房主的方法未删减| 欢乐喜剧人第一季综艺| 《法国空乘11》| 花样少年少女全集观看| 《风流女管家》电影在线看免费版| 雾岛奈津美全集种子| mm的职业2免费观看完整版电影| 歌后逆袭歌坛:我称王短剧全集| 武动乾坤 16K| 高清名侦探柯南:独眼的残像| 佐助真传| 美姐妹很努力| 名侦探柯南:独眼的残像| 三年电影在线观看免费大全| 倒霉爱神下载| 精油身体按摩油| 我的土地我的家30集| 千金归来全集免费| 鸡蛋花的作用| 斗罗大陆126| 黑白配1080完整版在线观看 | 叶罗丽第十一季在线观看| 潘金梅三级做爰| 男女电视剧演员表免费观看| 绝对防卫利维坦| 秘密花园免费版| 林正英国语全集| 禁忌电影免费观看电视剧| 扫黑风暴电视剧| 禁忌1980满天星凯·帕克 | 那夜四次| 酒后和朋友换娶妻中字| 《义姐不是贤妻良母》动漫全集樱花| 再来一次第7集| 金银悔1手机版免费版| 她的潮汐| 牙医诊所电影赤板栗免费完整版 | 风云之十里洋场| 《炸天小姐》| 燃冬电影高清在线观看免费 | 再战江湖国语| 林正英僵尸全集国语| 韩国绝伦推理片高分剧推荐大全| 特朗普侄女建议特朗普辞职| 滚石现场| 放学别走| 做aj的电视剧| 生死狙击百度影音| 瓜达卢佩的玫瑰在线观看免费版,中文 | 恭喜发财歌曲原唱播放| 花房姑娘国语版免费观看高清| 仁肉叉烧| 那金花和她的女婿电视剧免费观看| 金银1-5普通话少女潘| 青岛一酒店疑闪爆| 帝女花电视剧| 味道食在乡| 入青云免费观看全集完整版| 电视剧皇太子秘史| 四大名捕会京师攻略| 女超人法国电影未删减版在线观看 | 电影《牙医姐妹》正片| 大象传谋| 黛比浪漫女家教在线观看| 周密周芯竹宣布分手| 草灯和灯电影完整版| 马大帅第二部| 女长官的体罚1-43集介绍| 迪拉电视剧在线观看| 电影饺子| 极限挑战大电影下载| 黑金电影完整版| 天赐之女电影完整版在线观看免费| 天师钟馗金超群版| 飞机上的性服务K8| 天地情缘之绝世天魔| 无憾坎贝奇完整版视频在线观看| 小丑历险记| 法剧需要爸爸播种子| 鬼马保镖贼美人| 插曲的痛30集全集免费观看剧情介绍欧美 | 封开县| 白日梦我电视剧全集免费观看高清| 初体验5在线观看整板| 青春守艺人在哪里播出| 姐妹牙医电影观看免费高清| 张卫健西游记国语| 拉拉安斋电影完整版| 守法公民电影国语完整版免费观看| 《色戒》未删减在线观看| 冰川时代6| 又见一帘幽梦吻戏| 继续宠爱十年音乐会| 还珠格格在哪个平台可以看| 男同桌含着我的奶边摸边做l| 乖巧的儿媳免费观看电视连续剧| 朋友的母亲9在完整有限中字第5| 姐姐10免费完整高清电视剧在线看| 金银1-5hd普通版| 妙女兵1978普通话版| 台湾卖房女销售| 宝贝计划免费观看完整版| 暴躁少女高清完整版| 凡尘称尊:仙帝弃少全集免费| 凯瑟琳1991版满天星《一千零一夜》 | 最美的青春电视剧免费播放| 17·3电影在线观看| 路人吐槽跨年活动布置像“灵堂”| 善良的麦子| 还珠格格之燕儿翩翩飞| 迷人的岳 金珠| 人民的名义dvd版| 法国空姐6大结局免费| 密爱 电影| 小凤新婚下集免费观看视频播放| 镖行天下前传之库丁之谜| 不正当军事行为| 料理情人梦全集| 《玛丽!玛丽!》满天星中文| 华丽的外出电视剧全集免费观看| 第五个空弹壳| 雪豹特战电视剧免费观看完整版| 育婴室 电影| 西班牙电影《爱战树林》 | 恋爱先生在线观看| 拉萨市| 好男人影视在线观看西瓜| senima| 荣誉守则(成人版)在线观看 | 哈尔的移动城堡电影| 灵魂重生泰剧在线观看双男主| 机甲女神| 长津湖战役国语免费观看| 甜蜜惩罚未增删带翻译整集樱花| 怒火重案| 门当户对综艺| 巜我的大胸女友HD| 韩国激情大合集在线观看经典片| 命转乾坤粤语在线观看| 韩国mama颁奖礼| 凤随歌电视剧免费观看| 老旦是一棵树电视剧全集在线观看| 武侠电影| 我在伊朗长大| 一球成名电影| 庆余年第二季在线| 北上广不相信眼泪免费观看全集| 年轻的母亲免费在线| 鬼吹灯之怒睛湘西| 义胆群英| 美国电影《小辣椒》高清全集 | 丛林奇兵在线观看| 大管家电视剧| 最美逆行者| 为歌而赞哪个app可以看| 罗娜艳情录经典电影免费观看| 也平凡电视剧在线观看| 修车tv| 我的错误电影| 免费看电视剧珠帘玉幕| 电影搜索| 辣妹子电影电视剧在线播放| 雪中悍刀行分集剧情介绍| 小河淌水1952| 安塔芮丝百度影音| 无限资源日本动漫版在线| 挣扎吧当亚君| 美容院:特殊待遇3| 地久天长豆瓣| 酒店实生3满天星法版免费观看| 《恋爱舞台》动漫| 私人航空1法国满天星免费播放| 长月无烬电视剧免费观看| 向爸爸播种电影的英文| 还珠格格第一部高清| 爱我几何电影完整无删减免费观看中文版 | 牝教师在教室被淫辱| 关晓彤在好先生的翘臀| 下载,强奸强奸| 张版西游记| 战娘6全集免费下载| 操小萝莉| 台湾渔夫的荒野史记免费播放 | 站住房东你别跑全集免费| 无神之地不下雨| 惊声尖笑1免费完整版高清| 僵尸叔叔1| 女友系列辣文全集| 爸爸的朋友2免费中字翻译木瓜| 斗罗大陆免费观看视频| 花开有时颓靡无声水千丞全文阅读| 神探夏洛克第三季| 插曲的痛60集全剧情介绍| 谢谢你爱过我全集免费观看| 男女一起愁愁愁电影全集播放| 《初恋时间》1-6免费观看全集| 沐风之女电影完整免费观看| 爱我几何无删减版观看| 抗美援朝保家卫国纪录片第六集| 星界的战旗2| 沙坑里的女孩在线观看完整版| 满清十大酷刑未减测在线观看| 乔尼亚斯奥特曼全集| 超级马里奥世界2| 泰剧美人鱼| 秘密花园里的花园| 朴亚珍《隐形帽》原版在线观看| 绝世网红韩剧| 永生第四季海噬仙灵免费观看| 《利刃出鞘3》| 云和县| 著名导演韦廉病逝| 刻命裕也| 胡慧中电影| ボクの弥生さん| 大耳朵图图第二季全集下载| 三个和尚电影| 五笔偏旁| 伙头智多星动漫| 近代国士| 坎贝奇无憾1080P免费看| 我不可能爱你全集| 电影私人航空在线观看免费完整版| 太子发疯地撞着公主的小说| 需要爸爸的种| 电视剧长沙保卫战全集在线观看| 美国的忌讳1–7| 成长电视剧全集| 丽卡驯服2普通话版| 命定之人| 女版战狼9免费播放| 我家浴缸二三事在线观看| 假面骑士REVICE第五集| 美国式的忌讳愈演愈烈完整版| 沉香如屑免费观看完整版电视剧| 深海狂鲨百度影音| 《新人类之毒医肥尸2》在线播放| 播放电影孕妇在线观看免费| 冲锋21| 盟军敢死队4| 成全视频观看免费高清动漫第8季在线 | 邪恶力量第四季| 私人航空在线观看免费版完整版| 绝代双骄林志颖版| 天浴 在线观看| 莉娜安德森作品在线观看完整版免费| 女教师被学生连续糟蹋电影| 美丽的桃子第4季| 粉碎机电影| 一代匠师 电视剧免费观看| 刘玉玲电影《满天星》| 金瓶Z梅| 牌坊下的女人插曲| 男女一起愁愁愁国产电影完整版在线 | 牙医姊妹| 怨妇2电影免费中文字幕看完整版| 回复术士的重来人生动漫免费观看| 母狮行动美剧第二季在线观看| 林正英高清国语电影| 千金女贼| 黑白森林国语| 游泳教练的湿润教育电影在线观看| 灵蛇爱泰剧| 公与三个媳HD| 他在星河之州免费观看全集| 法国空姐2024年免费完整版| 电视剧华丽一族| 辽宁卫视在线直播观看| 招惹在线观看| 韩国爱情电影在线播放完整版| 男女愁愁愁全集哪里看| 小伙子爱上隔壁女邻居电视剧| 电影浪漫女家教正版货| 从结婚到恋爱电视剧免费观看全集 | 犯罪高手| 快手同框怎么弄| 梦比优斯奥特曼外传 亡灵复活| 黄飞鸿与十三姨| 麦子交换3在线播放| 福禄寿电影粤语| 法国空乘2016不难空乘在线观看| 数码暴龙| 禁忌1980| 仚屳屲冚读什么| 重生之逆转人生短剧全集| 封神英雄榜第2部| 孤岛飞鹰 电视剧| 朋友互换麦子在线观看| 琅琊榜风起长林| 韩国三级维修师傅的艳遇| 白雪公主h| 《沧元图》2在线观看| 电影甜性涩爱| 黑衣人高清下载| 《激战丛林》完整版在线观| 《泡我家的辣妹》动漫观看第一集| 武庚纪在线观看| 男排亚洲杯决赛直播| 迪迦奥特曼在线播放| 王国第一季在线观看| 电视剧掌门女婿| 黑白配视频免费大全在线观看| 25岁女高中生在线观看| 理伦电影第2季| 日和漫画中文配音| 烈火男儿之队长的故事| 跨界冰雪王| 冬暖花会开| 同学的妈妈ID| 女老师3在线观看| 初体验5免费观看全部电视剧| 《这份恋情望你察觉》| 人到四十电视剧全集| 养女大结局| 妙贼警探第四季| 《机械师6》电影在线看| 关于雇佣军的电影| 倔强驱魔师在线观看 | 孙千黄景瑜冬至免费观看| 日本空乘3免费高清原声满天星奔跑吧| 太阳照常升起电影| 法国《空乘15》艾米丽| 高清未婚男女的效率恋爱| 郑嘉颖最新电视剧| 绝世好爸粤语| 黑衣女人百度影音| 特殊诊所三级未删减版资源| 鉴宝女王:古玩市场我称霸全集免费 | 罗娜言情录| 小镇警事| 《妻子3》免费高清电视剧在线观看| 让爱回来电视剧 全集| 粉红大白菜在线免费观看 | 铯妮玛亚洲欧洲夫妻轮换| 长安二十四计全集免费看| 白峰美羽| 水嫩多汁的蜜桃H| 出轨的女人国语在线观看| 真爱背后全集| 樱花动漫免费看妖神记第五季| 三级健身房教练| 奥伊米亚康村| 烽火佳人电视剧免费观看完整版| 我的好姐姐们| 玉蒲团之愉情宝鉴在线观看| 我的漂亮的瘦子5HD中字_午夜电影全集_完整版免费在线观看-天天影院 | 高清战旗如画未删减| 人猿泰山1995意大利真人版完整版| 风云2全集| 老板打市长热线求来电:土豆等着呢| 轻吻姐姐| 为了爱离开你| 台湾版《棘手狂情》香港电影| 终极三国土豆网| 杰西简凌云壮志无删减| 迷惘的爱| 少儿节目小猪佩奇| 曰本色情电影替夫还债| 年轻气盛| 都市男女的爱情法则在线观看| 爱情有烟火电视剧| 窃听风云2电影| 法国 女超人| 七龙珠在线| 法国兄妹开荒原版视频播放 | 大江大河3免费观看全集电视剧| 色欲情狂| 《血恋3之血河重生》 | 《法国空乘10》| 高清《月鳞绮纪》电视剧| 82版杨思敏1-5集剧情-百度| 龙甲合体| 庆余年电视剧免费观看完整版| 嘻嘻哈哈四重奏| 川西剿匪记电视剧全集免费观看| 酒店1-5集在线观看免费版剧情介绍 | 快乐小神仙| 好大灬好硬灬好爽灬无码日本| 情爱天空| 巨人最终季PART3在线观看| 爱唯侦察/1024| 电影日本妈妈| 追捕电视剧全集免费观看| 色拉拉 hd| 电击小子第3部四圣团| 男女一起愁愁愁在线观看全集高| star409| 年轻的嫂子2免费观看| 妈妈屈身儿子同学电影| 公交车艳妇系列1一40| 星克莱尔《豪门贵妇》在线观看| 唐山大兄演员表| 爱情正在直播| 义姐是不是良在线免费观看 | 南靖县| 真心请按两次铃优酷| 我朋友的母亲2完整视频有翻译吗| 50岁阿姨大人免费观看5| 伏罗希洛夫射手 电影| 公之孚手中字9| 善良的儿媳按摩店按摩电影| 莫陌百度影音| 法国空高压监狱伦理片| 高清《失窃的女孩》电视剧| 寒战2西瓜影音| 喜羊羊与灰太狼之虎虎生| 命运交响曲迅雷下载| 盛唐风流电影在线观看高清国语| 罪域30| 和朋友换娶妻野外夫妇3| 说唱梦工厂2024在线观看| 名侦探柯南迅雷看看| 牝老师| 唐朝诡事录2之西行免费观看全集| 老舅1-27集全免费播放| 91密桃| 婚姻时差电视剧全集| 法库县| 功夫小蝇高清| 台湾版红楼梦| 《入室暴行3被蹂躏电影理论| 借种电影完整版| 猎罪图鉴2大结局| overflower第一季无删减在线观看 | 刘罗锅电视剧| 1995意大利版泰山全版| 高清《香港奇案之吸血贵利王》电影| 小羊没烦恼7分钟视频在线观看| 赤板栗电影大全| 心灵捕手 电影| 老男孩之猛龙过江西瓜影音| 《法国娃娃脸》高清| 不能说的秘密mv| 李晓鹏的父是谁| 扎职粤语高清完整版| 爷们儿全集免费观看| 被义子糟蹋| 小猪佩奇全集大全| 闪耀的她1-36集免费观看| 电影特别的酒店| 拆弹专家| 纨绔当爹短剧全集| 罗莎版《拳击手2》在线观看| 电影猩猩王| 扫黑风暴28全集免费播放| 骄阳似我1-36集电视剧| 变态研讨会| 強暴處女1~12集| 兽性新人类2| 八月未央电影| 麻豆AV《修车艳遇》在线观看| 我的家庭女教师| 《今夜不设防》电视剧| 369你懂的电影在线观看| 梅森探案集| 独闯龙潭百度影音| 小妖怪的夏天动画片| 夫妇互换之木下凛凛子| 出师一表真名世| 阴阳镇怪谈电影在线观看| 花姑娘免费观看| 奥特曼大电影2012| 小羊没烦恼7分钟视频在线观看| 和部长| 授她以柄电视剧免费播放| 半是蜜糖| 束缚游戏在线免费观看| 兽兽的黑木耳照片| 电视剧杨贵妃秘史| 混合宿舍2| 我们都是好朋友电视剧| 玄女心经2免费观看全集 | 站着再来一次第26集免费播放| 金刚大战哥斯拉3免费完整版| 女版第一滴血| 安斋拉拉主演的什么电影| 小孩身上有白斑图片| 初恋时间免费观看全集| 青春之旅第二季| 《恶犬》短剧全集| 美丽的的小樱桃| 我是刑警38集在线观看| 北京辉子哥| 酒店实生3满天星法版免费观看 | 新世界免费观看完整版| 房东女2| 冲锋电影| 逆天至尊在线观看全集免费| 战狼6真人片版| 风筝电视剧免费观看| 爱有来生在线| 坎贝奇第三部曲无憾免费播放| 塔兹米死了吗| 花样爷爷搜查队| 17·3电影在线观看| 鹰巢预备警官| 《我家那小子2026》| 《玉女心经2》国语| 哥布林的窑洞第一季| 醴陵市| 公主嫁到粤语版| 背着善宰跑电视剧免费观看| 意大利八尺夫人未删减版剧情简介 | 落魄贵族琉璃川免费观看 | 死神来了4高清版在线观看| 莫丽3特别酒店完整版| 白月梵星全40集免费观看完整版 | 小鸡电影网| 《水野朝阳之出差电影| 大鱼海棠| 我的机器人女友国语| 《姐姐真漂亮》中韩歌词| 豪杰春香全集| 国色天香十七区品质怎么样| 《overflower》第一季| 樊振东爆冷出局事件| 假面舞会遇到朋友老婆| 木下电影电影免费播放| 以你的心诠释我的爱泰剧免费观看| 电视剧《三十而立》| 白衣女超人电影完整版| 步步惊心电视剧| 文昌市| 慈禧的秘密生活电影| 我和丰满瑜伽老师| 我和继拇做爰6| 新上海滩黄晓明高清| 黑帮总裁| 播放地道战| 出差期间未婚妻遭上司欺负电影在线| 孤芳不自赏 电视剧| 暖暖国语高清免费观看完整 | 《和讨厌的部长出差旅》 | 只此江湖梦电视剧免费观看| 兔子先生第一季第6期24k高清无打码 | HD版激战丛林完整版| 美女脱衣麻将| 儿子同学的妈妈卖保险| 我是特种兵3之狼牙| 金助理为何那样 漫画| 《航空服务4》电影| 麻辣烫爱在一起| 老爸的爱情全集在线观看| 正在播放:JUL-601 你真的是处男吗?因为发现丈夫出轨被自称童贞的男子欺骗身心 | 心理测量者| 愤怒的小孩电影全集| 《娃娃脸》MV| 永不磨灭的番号高清| 《哪吒2:魔童闹海》免费观看| 省港一号通缉犯未删减版百度云| 我叫刘跃进| 当旺爸爸剧情| 我是女王 电影| 九霄龙帅电视剧全集| 《善良的妻子》| 韩国伦理需要爸爸的种子| 电视剧楚留香传奇| 超级女警察| 白峰正版国语全集下载| 电影热辣滚烫今日正式上映| 变成黑皮后跟朋友无增删| 冢本监督昭和系列越南女子别动队在线观看完整版 | 回复术士的重启人生在线观看高清| 异形终结2| 诡秘之主免费| 家属1~6集全集免费| 那山那人那狗电影| 王源翻栏杆被拍| 招惹电视剧免费观看全集完整版| 夫妻免费看大片真人电视剧| 木下凛凛子| 欢乐好声音1普通话版| 勐垅沙免费| 小汤圆正式出院| 水电工外遇电影| 一只狗的使命| 心里的声音 迅雷下载| 陈雅伦《为卿痴狂》| 疯狂女人| 点燃我温暖你更新时间| 三年全免费观看在线播放| 爱情悠悠药草香电视剧全集| 双雄电影| 《庆余年2》今晚开播| 养生馆男在线观看完整版电影| 《纯真年代的爱情》| 曹云金官场斗| 美丽小瘦子7| 电影平果| 宫锁沉香 电影| 修理工的艳遇| 大众健美操二级| 快乐到家好看吗| 猪猪侠超星五灵侠| 《禁忌5》中文字幕| 逍遥法外迅雷下载| 东北往事之黑道风云二十年电视剧| 新油菜电影在线观看| 任达华温碧霞电影| 小柔的性放荡羞辱日记动漫| 黑白配高清完整版在线观看| 电视剧后宫甄嬛传| 变形金刚3国语版| 插曲的痛30集全集免费播放百度云资源| 类似周末同床的电影| 兄弟之道在线观看高清免费 | 秦皇岛 万能青年旅店| 象限之眼| 东宫西宫| 渔夫荒野1988版免费观看 | 斗罗大陆121| 吃翔什么意思| 销冠的秘密2在线看| 全职猎人96| 王牌保镖1在线观看原声| 酒店1-80集全集免费播放| 赤热电视剧在线观看| 瑞臣贝贝| 海大鱼电影免费完整版| 金银1—5国语免费观看普通话| 美国派1电影| 非常人贩2国语版| 小凤的新婚| 夏晚晴天电视剧| 鬼哭狼嚎的意思| 妖魔道之神仙学堂免费版| 女佐罗在线看| 美食天王| 母亲4高清免费观看韩国| 台剧《浪漫女家教》黛比在线观看 | 丰满的女邻居在线观看| 兄弟战争4| 总统夫人罗丽星克莱尔| 泰剧爱有天意| 渣男退散短剧全集| 女友的妈妈双字id| 争宠攻略全集免费| 电视剧你比星光美丽免费观看| 疯狂爱情韩剧全集免费观看| 凯·帕克《甜心》在线看| 野花在线观看免费观看高清中文| 妖精的尾巴63| 维修工艳遇在线| 强奸2制服诱惑完整版| 第一炉香电影完整版观看| 满天星在线观看完整免费高清原声满天| 黑夜中相拥电视剧免费观看| 台风少年行| 电影晁盖| 四个少妇精油按摩在线观看| 韩国电影诱惑| 周楚楚 维多利亚一号| 圣特罗佩姑娘们免费观看 | 电影加勒比海盗4| 《妻子的闺蜜》大结局| 欧式少女15集全观看视频| 情圣是怎么练成的| 神探夏洛克 第四季| 《北越暴行》2在线观看| 东京复仇者第一季高清在线观看| 我的好兄弟8免费观看高清| 如也小说| 韩四少妇特殊精油按摩高潮不断| 全红婵夺冠后被英国选手熊抱离场 | 台湾版粉红大白菜1987年演员表 | 绽放的许开心在线免费观看| 鼠来宝1在线观看| 《花子vs倔强的驱魔师》1-4集动漫在线 | 日韩私人游泳馆| 日本又白又嫩水| 穿比基尼外星人| 《粉红小白菜》美国| 贤妻良母全集| 阴宅凶灵| 激战丛林2无删减版| 月上重火免费观看全集完整版高清| 高清《人生第一次》在线观看| 国产电视剧大全在线观看| 罗丽星克莱尔《迷宫》在线观看| 成熟的女儿免费观看电视剧全集| 辣妹刺客2正片完整版在线观看| 偷爸爸的种子免费观看电视剧| 《神墓》全集免费动漫| 女人强奸| 尸城在线观看| 三级《出差被同房》| 美国农场主儿女1984免费| 年轻善良的岳母| 化妆舞会1998罗丽星克莱尔| 桃色凶器免费看| 少妇的诱惑电影观看| 致命黑兰在线观看| 金银梅1-5集免费播放电视剧| 豆腐发源地是哪里| 蜜桃1997| 好好感受本王| 《法国空8》完整版| 吊饰男士3季全集| 《狂飙》在线| 老婆5| 电视剧娘家的故事第三部 | 莫妮卡《爱我几何》哪里能看 | 《疯狂》1980年美国原版| 媳妇和妈短剧免费完整版| 电影《灭火宝贝1》在线看免费| 洪金宝电影国语版| 亲爱的电视剧免费播放| 富兰克林 电影| 村姑电影在线播放免费观看| 将军之夜| 为歌而赞第二季在哪看| 爱人 下载| 特殊客房1983经典版介绍| 陈雪凝回应抄袭汪苏泷| 侠僧探案传奇大夜叉| 偃师市| 一不小心捡到爱在线观看全集| 电视剧大漠枪神| 温柔的背叛杨桃| 白峰美羽女教师无删减播放| 莲花楼连续剧40集高清| 国乒男团逆转韩国进决赛| 凶猛的办公室| 美国电影需要爸爸播种子的片段| 一路向西是什么电影| 小爸爸爱奇艺| 韩剧《魔鬼爸爸》免费观看全集| 高庄监狱在线观看网址| 落跑甜心全集下载| 电视剧至尊红颜| 王杰2001香港演唱会| 丈夫不在一周七天我失去了理智| 炸元宵不爆开不崩油好方法| 咒怨录像带| 星际迷航:叛徒| 游泳馆特殊待遇| 符文密码| 夫妻免费观看全集完整版| 豪斯医生第一季01| 侏儒国语版免费观看全集| 志在出位| 孤独又灿烂的神一鬼怪| 雷神4在线观看| 香港小姑娘一级电影| 断掌顺娘电视剧免费观看| 机场特警评价| 胜女的代价剧情介绍| 行政助理满天星法版免费观看| 冷风暴1-48集免费观看| 八方传奇电视剧| angelababy最新电影| ujizz在线播放| 闪耀的她电视剧免费观看全集| 女状元文武:双全惊天下短剧全集| 新凯莱最新消息| 法国空姐4在线| 渔夫荒淫史在线| 就爱妹妹| 因法之名免费全集在线观看| 年轻的继拇3| 央视主持人朱迅追悼会| 陪你逐风飞翔电视剧免费观看23| 迪迦奥特曼在线播放| 插曲的痛免费观看第5集| 至尊红颜内地版| 百度战曲| 30插曲免费高清在线观看完整版| 《总统夫人》星克莱尔演员表| 一拳超人第2季免费| 勇敢的心电影在线观看免费完整版| 年轻的瘦子| 女销售员的秘密2未删减版在线播放| 神雕侠侣电影版| 错嫁甜婚全集免费| 金太狼的幸福生活百度影音 | 我的学妹| 《法国女狱警》完整版| 如意芳霏40集全电视剧| 咱们结婚吧邓佳佳结局| 麻江县| 都市激情| 戏梦巴黎百度影音| 余生免费观看|