国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

Linux-3.0.8中基于S5PV210的IRQ模塊代碼追蹤和分析

發(fā)布者:Asawen最新更新時間:2025-01-24 來源: cnblogs關(guān)鍵字:S5PV210 手機(jī)看文章 掃描二維碼
隨時隨地手機(jī)看文章

init/main.c:


1 asmlinkage void start_kernel(void)

2 {

3     ......

4     early_irq_init();

5     init_IRQ();

6     ......

7 }


early_irq_init()函數(shù)有兩種實(shí)現(xiàn),一種是基于radix tree,一種是定義靜態(tài)數(shù)組,如果要使用radix tree實(shí)現(xiàn)的,那么需要打開SPARSE_IRQ配置選項,由于我對數(shù)據(jù)結(jié)構(gòu)不了解,所以分析以下靜態(tài)數(shù)組實(shí)現(xiàn)方式版本的。


/kernel/irq/irqdesc.c


 1 struct irq_desc irq_desc[NR_IRQS] __cacheline_aligned_in_smp = {

 2     [0 ... NR_IRQS-1] = {

 3         .handle_irq    = handle_bad_irq,

 4         .depth        = 1,

 5         .lock        = __RAW_SPIN_LOCK_UNLOCKED(irq_desc->lock),

 6     }

 7 };

 8 

 9 int __init early_irq_init(void)

10 {

11     int count, i, node = first_online_node;

12     struct irq_desc *desc;

13 

14     init_irq_default_affinity();

15 

16     printk(KERN_INFO 'NR_IRQS:%dn', NR_IRQS);

17 

18     desc = irq_desc;

19     count = ARRAY_SIZE(irq_desc);

20 

21     for (i = 0; i < count; i++) {

22         desc[i].kstat_irqs = alloc_percpu(unsigned int);

23         alloc_masks(&desc[i], GFP_KERNEL, node);

24         raw_spin_lock_init(&desc[i].lock);

25         lockdep_set_class(&desc[i].lock, &irq_desc_lock_class);

26         desc_set_defaults(i, &desc[i], node);

27     }

28     return arch_early_irq_init();

29 }


  第一次見到這種初始化數(shù)組全部成員為同樣內(nèi)容的方式,可以學(xué)習(xí)積累下。


  NR_IRQS在arch/arm/mach-s5pv210/include/mach/irqs.h下定義:


1 #define NR_IRQS            (IRQ_EINT(31) + S5P_GPIOINT_COUNT + 1)

  上面函數(shù)的核心就是調(diào)用desc_set_defaults()來初始化上述中斷描述符數(shù)組,kernel/irq/irqdesc.c:


 1 static void desc_set_defaults(unsigned int irq, struct irq_desc *desc, int node)

 2 {

 3     int cpu;

 4 

 5     desc->irq_data.irq = irq;

 6     desc->irq_data.chip = &no_irq_chip;

 7     desc->irq_data.chip_data = NULL;

 8     desc->irq_data.handler_data = NULL;

 9     desc->irq_data.msi_desc = NULL;

10     irq_settings_clr_and_set(desc, ~0, _IRQ_DEFAULT_INIT_FLAGS);

11     irqd_set(&desc->irq_data, IRQD_IRQ_DISABLED);

12     desc->handle_irq = handle_bad_irq;

13     desc->depth = 1;

14     desc->irq_count = 0;

15     desc->irqs_unhandled = 0;

16     desc->name = NULL;

17     for_each_possible_cpu(cpu)

18         *per_cpu_ptr(desc->kstat_irqs, cpu) = 0;

19     desc_smp_init(desc, node);

20 }


  最后返回時調(diào)用的arch_early_irq_init()函數(shù)并沒有做事情。


  接著看init_IRQ():


1 void __init init_IRQ(void)

2 {

3     machine_desc->init_irq();

4 }

  machine_desc是全局變量,定義在板文件中,由于我們使用的是s5pv210,且demo板號選的是smdkv210,所以這個全局變量就在arch/arm/mach-s5pv210/mach-s5pv210.c中:


1 MACHINE_START(SMDKV210, 'SMDKV210')

2     /* Maintainer: Kukjin Kim */

3     .boot_params    = S5P_PA_SDRAM + 0x100,

4     .init_irq    = s5pv210_init_irq,

5     .map_io        = smdkv210_map_io,

6     .init_machine    = smdkv210_machine_init,

7     .timer        = &s5p_timer,

8 MACHINE_END


arch/arm/mach-s5pv210/mach-s5pv210.c中還有如下函數(shù)定義:


 1 void __init s5pv210_init_irq(void)

 2 {

 3     u32 vic[4];    /* S5PV210 supports 4 VIC */

 4 

 5     /* All the VICs are fully populated. */

 6     vic[0] = ~0;

 7     vic[1] = ~0;

 8     vic[2] = ~0;

 9     vic[3] = ~0;

10 

11     s5p_init_irq(vic, ARRAY_SIZE(vic));

12 }


arch/arm/plat-s5p/irq.c


 1 void __init s5p_init_irq(u32 *vic, u32 num_vic)

 2 {

 3 #ifdef CONFIG_ARM_VIC

 4     int irq;

 5 

 6     /* initialize the VICs */

 7     for (irq = 0; irq < num_vic; irq++)

 8         vic_init(VA_VIC(irq), VIC_BASE(irq), vic[irq], 0);

 9 #endif

10 

11     s3c_init_vic_timer_irq(5, IRQ_TIMER0);

12 

13     s3c_init_uart_irqs(uart_irqs, ARRAY_SIZE(uart_irqs));

14 }


  上面涉及到的函數(shù)都是去操作VIC相關(guān)的寄存器,這部分操作還不是很清楚,先不往下繼續(xù)追蹤了。


關(guān)鍵字:S5PV210 引用地址:Linux-3.0.8中基于S5PV210的IRQ模塊代碼追蹤和分析

上一篇:U-Boot bootargs簡析
下一篇:04_uboot全面講解

推薦閱讀最新更新時間:2025-06-03 15:26

S5PV210 | 安裝交叉編譯工具鏈(toolchain)
交叉工具鏈 交叉編譯:是A機(jī)器上編譯生成,運(yùn)行在B機(jī)器上。兩個機(jī)子有不同的機(jī)器指令。 工具鏈:一般由編譯器、連接器、解釋器和調(diào)試器組成。 擴(kuò)展閱讀:交叉編譯工具鏈(詳解)- 博客園 1.準(zhǔn)備資料: 項目地址: 1.linux+QT項目:x210bv3s / qt_x210v3s_160307 2.裸機(jī)項目:x210bv3s / v210_NoOsDemo 交叉編譯工具鏈: arm-2009q3.tar.bz2(可百度搜索網(wǎng)絡(luò)資源) 網(wǎng)友分享資源: https://sourcery.mentor.com/public/gnu_toolchain/arm-none-linux-gnueabi/arm-2009q
[單片機(jī)]
S5PV210 啟動流程
S3C6410啟動流程 首先,看一下S3C6410啟動流程 ① iROM supports initial boot up : initialize system clock, D-TCM, device specific controller and booting device. ② iROM boot codes can load 4KB of bootloader to stepping stone. The 8KB boot loader is called BL1. ③ BL1: BL1 can initialize system clock, UART, and SDRAM for user. After ini
[單片機(jī)]
<font color='red'>S5PV210</font> 啟動流程
ARM芯片開發(fā)(S5PV210芯片)——定時器、看門狗、RTC
1、計數(shù)器 計數(shù)器就是每隔一段固定的時間計數(shù)值就加一,于是我們可以根據(jù)計數(shù)值來計算時間:經(jīng)過的時間=計數(shù)值x計數(shù)時間間隔。 2、定時器 2.1、定時器介紹 定時器具有計時的功能,類似于我們手機(jī)自帶的倒計時功能。比如我們先給定時器設(shè)置計時一小時,當(dāng)一小時之后定時器就會發(fā)出終端信號,提醒CPU該執(zhí)行提前綁定好的中斷處理程序。 2.2、定時器原理 定時器內(nèi)部有一個計數(shù)器,當(dāng)我們設(shè)定好計時的時間后,內(nèi)部的計數(shù)器會通過計數(shù)值和計數(shù)時間間隔來計算經(jīng)過的時間。當(dāng)經(jīng)過的時間等于設(shè)定的 計時時間,定時器就會發(fā)出終端信號,提醒CPU時間到了,該去處理相應(yīng)的中斷函數(shù)。定時的時間由計數(shù)值和計數(shù)時間間隔有關(guān),其中計數(shù)時間間隔和定時器的時鐘頻率有關(guān),
[單片機(jī)]
ARM芯片開發(fā)(<font color='red'>S5PV210</font>芯片)——定時器、看門狗、RTC
S5PV210地址尋址能力映射
1.S5PV210是32位SoC,尋址能力為4G,0x0000 0000~0xFFFF FFFF。 DRAM地址為0x1FFF FFFF~0x5FFF FFFF,即只支持外掛1G內(nèi)存。 映射如下: 2.下圖是iROM和SRAM的地址映射
[單片機(jī)]
<font color='red'>S5PV210</font>地址尋址能力映射
乘聯(lián)會:8月新能源車國內(nèi)零售滲透率53.9%
根據(jù)乘聯(lián)會數(shù)據(jù),8月全國狹義乘用車零售190.5萬輛,同比下降1.0%,環(huán)比增長10.8%;今年以來累計零售1,347.2萬輛,同比增長1.9%。其中8月常規(guī)燃油車零售87萬輛,同比下降28%,環(huán)比增長4%;1-8月常規(guī)燃油車零售744萬輛,同比下降15%。8月國內(nèi)新能源車零售滲透率53.9%。 隨著新能源車市能源結(jié)構(gòu)變化,滲透率第二個月突破50%,整體車市季節(jié)走勢與傳統(tǒng)燃油車季節(jié)走勢逐漸出現(xiàn)分化,8月新能源車市熱度攀升,繼續(xù)延續(xù)下半年持續(xù)走強(qiáng)的趨勢。 乘聯(lián)會指出8月乘用車市場的特征包括以下五點(diǎn): 一、8月新能源零售環(huán)比7月增速17%是近期較強(qiáng)的,體現(xiàn)國家報廢更新政策的良好市場反饋; 二、新能源車國內(nèi)零售滲透率達(dá)到54%,較2
[嵌入式]
一季度光伏逆變器8大排行榜
今年一季度,光伏逆變器市場持續(xù)向好。國內(nèi)市場方面,新增光伏裝機(jī)高于預(yù)期,僅1-2月光伏新增裝機(jī)36.72GW,超2023年一季度。海外市場方面,歐洲去庫存速度以及效果明顯,疊加亞洲新興市場表現(xiàn)亮眼。光伏逆變器企業(yè)迎來新的發(fā)展機(jī)遇。 在此情形之下,國內(nèi)光伏逆變器招投標(biāo)市場火熱。央國企頻頻釋放吉瓦級采購訂單,各大光伏逆變器廠商則為了爭奪訂單,積極參與招投標(biāo)。國際能源網(wǎng)/光伏頭條(PV-2005)統(tǒng)計,一季度,光伏逆變器招投標(biāo)項目中,定標(biāo)項目數(shù)量高達(dá)114個,合計容量74.19GW,中標(biāo)企業(yè)多達(dá)51家。招標(biāo)容量則達(dá)到43.84GW,均創(chuàng)新高。 一季度,光伏逆變器8大排行榜 國際能源網(wǎng)/光伏頭條(PV-2005)長期關(guān)注光伏逆變器招投
[新能源]
針對STM32設(shè)計,這8種GPIO配置不可忽視
最近在看數(shù)據(jù)手冊的時候,發(fā)現(xiàn)在Cortex-M3里,對于GPIO的配置種類有8種之多: (1)GPIO_Mode_AIN 模擬輸入(2)GPIO_Mode_IN_FLOATING 浮空輸入(3)GPIO_Mode_IPD 下拉輸入(4)GPIO_Mode_IPU 上拉輸入(5)GPIO_Mode_Out_OD 開漏輸出(6)GPIO_Mode_Out_PP 推挽輸出(7)GPIO_Mode_AF_OD 復(fù)用開漏輸出(8)GPIO_Mode_AF_PP 復(fù)用推挽輸出 對于剛?cè)腴T的新手,我想這幾個概念是必須得搞清楚的,平時接觸的最多的也就是推挽輸出、開漏輸出、上拉輸入這三種,但一直未曾對這些做過歸納。 因此,在這里做一個總結(jié): 一
[單片機(jī)]
針對STM32設(shè)計,這<font color='red'>8</font>種GPIO配置不可忽視
使用ESP8266將STM32F103C8連接到互聯(lián)網(wǎng)的方法
在本教程中,我們使用 ESP8266 將 STM32F103C8 連接到互聯(lián)網(wǎng)。在這里,我們將ESP8266 Wi-Fi 模塊與我們的藍(lán)丸 STM32F103C8 板接口,并將數(shù)據(jù)發(fā)送到 ESP8266 網(wǎng)絡(luò)服務(wù)器上托管的網(wǎng)頁。 所需組件 藍(lán)丸STM32F103C8板 ESP8266 無線無線模塊 筆記本電腦和無線網(wǎng)絡(luò)熱點(diǎn) ESP8266 無線無線模塊 大多數(shù)人將 ESP8266 稱為 WIFI 模塊,但它實(shí)際上是一個微控制器。ESP8266 是樂鑫公司(一家總部位于上海的公司)開發(fā)的微控制器的名稱。該微控制器具有執(zhí)行WIFI相關(guān)活動的能力,因此被廣泛用作WIFI模塊。 接地(0 V) 發(fā)射,傳輸數(shù)據(jù)位 X GPIO 2
[單片機(jī)]
使用ESP8266將STM32F103C<font color='red'>8</font>連接到互聯(lián)網(wǎng)的方法
小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved