娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

AD電阻轉(zhuǎn)換---那些年我們一起玩mini2440(arm9)裸機(jī)

發(fā)布者:PeacefulWarrior最新更新時(shí)間:2024-08-09 來源: cnblogs關(guān)鍵字:mini2440  arm9  裸機(jī) 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

ADC驅(qū)動(dòng)程序設(shè)計(jì)

ADC:模/數(shù)轉(zhuǎn)換器。

一種將模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)的裝置;

DAC:數(shù)/模轉(zhuǎn)換器。

一種將數(shù)字信號(hào)轉(zhuǎn)換成模擬信號(hào)的裝置。

模擬信號(hào)轉(zhuǎn)換為數(shù)值信號(hào)的步驟:

1.     取值;

2.     量化;

3.     編碼;

S3C2440ADC

S3C2440芯片內(nèi)部共有8路A/D轉(zhuǎn)換通道AIN0~AIN7,但是轉(zhuǎn)換器只有一個(gè)。

轉(zhuǎn)換精度為10位,故轉(zhuǎn)換后的值最小時(shí)會(huì)接近0,最大時(shí)會(huì)接近1024.

 

 


最大的轉(zhuǎn)換率在2.5MHZ轉(zhuǎn)換時(shí)鐘下能達(dá)到500KSPS(每秒采樣5000千次)

 

在常見的設(shè)計(jì)中,如mini2440開發(fā)板,一般AIN4、AIN5、AIN6、AIN7被用作了四線電阻觸摸的YM、YP、XM、XP通道;剩余的AIN0~3被引出,其中AIN0直接和一個(gè)可調(diào)電阻W1連接。

 

師:AIN4、AIN5、AIN6、AIN7給觸摸屏用的;

AIN0用于可調(diào)電阻

(這樣電壓就可以作為一路模擬信號(hào)進(jìn)行轉(zhuǎn)換)

 

 

 

 ADC驅(qū)動(dòng)流程:1.初始化à2.啟動(dòng)à3.轉(zhuǎn)換結(jié)束à4.讀取轉(zhuǎn)換值

 

 

 


一.ADC初始化

 

A.選擇轉(zhuǎn)換通道-     B.設(shè)置轉(zhuǎn)換頻率

 

 

 怎么判斷開始轉(zhuǎn)換了?用一個(gè)whlie循環(huán),查詢ENABLE_START是否變成0

 

 怎么判斷轉(zhuǎn)換完成了?不斷查詢ECFLG是否為1

 

 讀取轉(zhuǎn)換值

 

#define GLOBAL_CLK      1  

#include   

#include   

#include 'def.h'  

#include 'option.h'  

#include '2440addr.h'  

#include '2440lib.h'  

#include '2440slib.h'  

#include 'mmu.h'  

#include 'profile.h'  

#include 'memtest.h'  

  

  

#define ADC_FREQ 2500000  

//#define ADC_FREQ   1250000  

  

  

volatile U32 preScaler;  

  

void adc_init(void);  

int ReadAdc(int channel);  

static void cal_cpu_bus_clk(void);  

void Set_Clk(void);  

void beep_init(void);  

void beep_run(void);  

/*************************************************  

Function name: delay  

Parameter    : times  

Description  : 延時(shí)函數(shù)  

Return       : void  

Argument     : void  

Autor & date : Daniel  

**************************************************/  

void delay(int times)  

{  

    int i,j;  

    for(i=0;i       for(j=0;j<400;j++);  

}  

/*************************************************  

Function name: Main  

Parameter    : void  

Description  : 主功能函數(shù)  

Return       : void  

Argument     : void  

Autor & date : Daniel  

**************************************************/  

void Main(void)  

{     

    int a0=0,tmp;  

    int Scom=0;  

    Set_Clk();  

    Uart_Init(0,115200);  

    Uart_Select(Scom);  

        

    adc_init();  

       while(1)  

    {  

        a0=ReadAdc(0);  

        Uart_Printf( 'AIN0: %04dn', a0);  

        delay(1000) ;  

    }  

  

}     

  

/*************************************************  

Function name: adc_init()  

Parameter    : int channel  

Description  : adc初始化  

Return       : void  

Argument     : void  

Autor & date : Daniel  

**************************************************/   

void adc_init(void)  

{  

    int channel=0; //AIN0,對(duì)應(yīng)開發(fā)板上W1可調(diào)電阻  

      

    preScaler = ADC_FREQ;  

    Uart_Printf('ADC conv,freq. = %dHzn',preScaler);  

    preScaler = 50000000/ADC_FREQ - 1; //PCLK=50M  我們要得到ADC_FREQ=2500000  

      

    Uart_Printf('PRSCVL=PCLK/ADC_FREQ - 1=%dn',preScaler);  

      

    /*AD轉(zhuǎn)換頻率設(shè)置,最大頻率為2.5MHz*/  

    rADCCON = (1<<14)|(preScaler<<6)|(channel<<3);    //setup channel 1<<14使能預(yù)分頻器 (preScaler<<6)預(yù)分頻值  channel<<3模擬通道選擇  

    delay(1000);          

  

}  

      

/*************************************************  

Function name: ReadAdc(int channel)  

Parameter    : int channel  

Description  : 獲取AD 轉(zhuǎn)換后的值  

Return       : int  

Argument     : void  

Autor & date : Daniel  

**************************************************/      

int ReadAdc(int channel)  

{  

  

    /*開啟AD轉(zhuǎn)換*/  

    rADCCON |= 0x01; //start ADC  

      

      

    while(rADCCON & 0x1);   //check if Enable_start is low  

      

    while(!(rADCCON & 0x8000)); //check if EC(End of Conversion) flag is high判斷轉(zhuǎn)換是否結(jié)束  

          

    return ( (int)rADCDAT0 & 0x3ff );//讀取轉(zhuǎn)換后的值  

}   

/*************************************************  

Function name: Set_Clk()  

Parameter    : void  

Description  : 設(shè)置CPU的時(shí)鐘頻率  

Return       : void  

Argument     : void  

Autor & date : Daniel  

**************************************************/  

void Set_Clk(void)  

{  

    int i;  

    U8 key;  

    U32 mpll_val = 0 ;  

    i = 2 ;              //don't use 100M!  

                         //boot_params.cpu_clk.val = 3;  

    switch ( i ) {  

    case 0: //200  

        key = 12;  

        mpll_val = (92<<12)|(4<<4)|(1);  

        break;  

    case 1: //300  

        key = 13;  

        mpll_val = (67<<12)|(1<<4)|(1);  

        break;  

    case 2: //400  

        key = 14;  

        mpll_val = (92<<12)|(1<<4)|(1);  

        break;  

    case 3: //440!!!  

        key = 14;  

        mpll_val = (102<<12)|(1<<4)|(1);  

        break;  

    default:  

        key = 14;  

        mpll_val = (92<<12)|(1<<4)|(1);  

        break;  

    }  

      

    //init FCLK=400M, so change MPLL first  

    ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);   //set the register--rMPLLCON  

    ChangeClockDivider(key, 12);    //the result of rCLKDIVN [0:1:0:1] 3-0 bit  

    cal_cpu_bus_clk();    //HCLK=100M   PCLK=50M  

}  

/*************************************************  

Function name: cal_cpu_bus_clk  

Parameter    : void  

Description  : 設(shè)置PCLKHCLKFCLK的頻率  

Return       : void  

Argument     : void  

Autor & date : Daniel  

**************************************************/  

static void cal_cpu_bus_clk(void)  

{  

    static U32 cpu_freq;  

    static U32 UPLL;  

      

    U32 val;  

    U8 m, p, s;  

      

    val = rMPLLCON;  

    m = (val>>12)&0xff;  

    p = (val>>4)&0x3f;  

    s = val&3;  

  

    //(m+8)*FIN*2 不要超出32位數(shù)!  

    FCLK = ((m+8)*(FIN/100)*2)/((p+2)*(1<      

    val = rCLKDIVN;  

    m = (val>>1)&3;  

    p = val&1;    

    val = rCAMDIVN;  

    s = val>>8;  

      

    switch (m) {  

    case 0:  

        HCLK = FCLK;  

        break;  

    case 1:  

        HCLK = FCLK>>1;  

        break;  

    case 2:  

        if(s&2)  

            HCLK = FCLK>>3;  

        else  

            HCLK = FCLK>>2;  

        break;  

    case 3:  

        if(s&1)  

            HCLK = FCLK/6;  

        else  

            HCLK = FCLK/3;  

        break;  

    }  

      

    if(p)  

[1] [2]
關(guān)鍵字:mini2440  arm9  裸機(jī) 引用地址:AD電阻轉(zhuǎn)換---那些年我們一起玩mini2440(arm9)裸機(jī)

上一篇:s3c2440裸機(jī)開發(fā)調(diào)試環(huán)境(MDK4.72,Jlink v8,mini2440)
下一篇:移植openssh至嵌入式ARM開發(fā)板

推薦閱讀最新更新時(shí)間:2025-06-07 23:39

LCD---那些年我們一起玩mini2440(arm9)裸機(jī)
LCD-liquid crystal display 的簡(jiǎn)稱,液晶顯示器按驅(qū)動(dòng)方式分為1.靜態(tài)驅(qū)動(dòng)、2.簡(jiǎn)單矩陣驅(qū)動(dòng)及3.主動(dòng)矩陣驅(qū)動(dòng)。 其中,簡(jiǎn)單矩陣又可分為1.扭轉(zhuǎn)向列型(TN)和超轉(zhuǎn)向列型(STN)兩種,而主動(dòng)矩陣驅(qū)動(dòng)則以TFT為主。 TN與STN都采用場(chǎng)電壓驅(qū)動(dòng)方式,如果顯示尺寸加大,中心部分對(duì)電機(jī)變化的反應(yīng)時(shí)間就會(huì)變長(zhǎng),顯示器的速度跟不上。為解決這個(gè)問題,主動(dòng)矩陣驅(qū)動(dòng)TFT被提出,他通過晶體管顯示信號(hào)開啟過關(guān)閉液晶分子的電壓,從而避免了顯示器對(duì)電場(chǎng)效應(yīng)的依靠。 LCD一塊屏顯示圖像不但需要LCD驅(qū)動(dòng)器,還需要LCD控制器。很多主芯片cpu集成了LCD控制器。 依據(jù)顯示原理:作為幀同步信號(hào)的vsync,每發(fā)出一個(gè)脈
[單片機(jī)]
LCD---那些年我們一起玩<font color='red'>mini2440</font>(<font color='red'>arm9</font>)<font color='red'>裸機(jī)</font>
U-boot-2014.04移植到MINI2440(7) nand flash datasheet及arm9控制寄存器分析
我的MINI2440上有一個(gè)256M的nand flash,后面我們需要從nand啟動(dòng)u-boot,然后引導(dǎo)加載內(nèi)核,再掛載根文件系統(tǒng),這里先對(duì)其做一個(gè)較為細(xì)致的認(rèn)識(shí)。主要是硬件管腳定義,控制方式,處理器的控制寄存器對(duì)其做一個(gè)了解,因?yàn)楝F(xiàn)在市面上nand的用途比較廣泛,數(shù)碼相機(jī),mp3都要使用,進(jìn)入正題。 一.nand flash datasheeet 在移植好的u-boot下輸入nand info會(huì)出現(xiàn)下面的信息: Device 0: NAND 256MiB 3,3V 8-bit, sector size 128 KiB 這說明nand大小為256M,工作電壓3.3v,數(shù)據(jù)總線為8位,扇區(qū)大小為128K。首先我們
[單片機(jī)]
U-boot-2014.04移植到<font color='red'>MINI2440</font>(7) nand flash datasheet及<font color='red'>arm9</font>控制寄存器分析
Mini2440 按鍵驅(qū)動(dòng)程序?qū)W習(xí)筆記
參考了友善之臂的按鍵驅(qū)動(dòng)程序和韋東山寫的《嵌入式Linux應(yīng)用開發(fā)完全手冊(cè)》【下載見 http://www.linuxidc.com/Linux/2011-01/31114.htm 】一書的第20章—Linux異常處理體系結(jié)構(gòu)部分的按鍵驅(qū)動(dòng)程序,修改了部分內(nèi)容,學(xué)習(xí)了嵌入式Linux下按鍵驅(qū)動(dòng)程序。 按照習(xí)慣,先看原理,對(duì)所學(xué)習(xí)的知識(shí)結(jié)構(gòu)有了大致的了解了開始閱讀別人的代碼,仔細(xì)分析代碼實(shí)現(xiàn)的每個(gè)過程。由于時(shí)間有限,我只了解了一些概念性的理論和內(nèi)核代碼中部分?jǐn)?shù)據(jù)結(jié)構(gòu),學(xué)習(xí)的過程還有待深入。對(duì)于我這樣的初學(xué)者來說,想把資料中所介紹的每個(gè)原理和具體的實(shí)現(xiàn)方法都完全掌握,恐怕不止是時(shí)間的問題,我所追求的是一種快速上手的方法,先學(xué)會(huì)用再深入
[單片機(jī)]
Mini2440 Linux 內(nèi)存布局
在學(xué)習(xí)linux內(nèi)存尋址的過程中,注意到在x86架構(gòu)上,分段與分頁機(jī)制共存。而在RSIC體系結(jié)構(gòu)下一般只支持分頁。《深入理解linux內(nèi)核》是在x86架構(gòu)上介紹的linux物理內(nèi)存布局。在x86架構(gòu)上,linux被安裝在ram從物理地址的0x00100000也就是第二個(gè)1M的地方。內(nèi)核態(tài)的線性地址:0xc0000000~0xffffffff,在內(nèi)核態(tài)可以尋址0x00000000~0xbfffffff的地址,用戶態(tài)的線性地址范圍為:0x00000000~0xbfffffff,用戶態(tài)的程序不能訪問內(nèi)核態(tài)的線性地址。這幾個(gè)是線性地址只是CPU尋址的時(shí)候用,最終都是要映射到實(shí)際的物理地址。在內(nèi)核鏡像包括代碼段,數(shù)據(jù)段。在數(shù)據(jù)段的后面保存了
[單片機(jī)]
linux-2.6.32在mini2440開發(fā)板上移植 移植看門狗驅(qū)動(dòng)
1 在內(nèi)核中配置看門狗驅(qū)動(dòng) Linux-2.6.32.2 內(nèi)核具有完善的S3C2440 的看夢(mèng)狗驅(qū)動(dòng),我們只需配置一下就可以使用 了。在內(nèi)核源代碼目錄執(zhí)行:make menuconfig,進(jìn)入內(nèi)核配置主菜單,依次選擇進(jìn)入如 下子菜單: Device Drivers --- Watchdog Timer Support --- 打開看門狗配置菜單,在這里可以選擇對(duì)S2C2410/2440 中看門狗的配置選項(xiàng)。 以上配置所對(duì)應(yīng)的驅(qū)動(dòng)源代碼為:linux-2.6.32.2/drivers/watchdog/s3c2410_wdt.c 2 測(cè)試看門狗 雖然友善之臂提供了一個(gè)漂亮的圖形界面的看門狗測(cè)
[單片機(jī)]
Mini2440 SDRAM、NAND、MMU
1. SDRAM 當(dāng)加電默認(rèn)從NAND啟動(dòng)時(shí),先將4K代碼復(fù)制到Steppingstone內(nèi)RAM執(zhí)行,在執(zhí)行Steppingstone代碼時(shí),會(huì)將剩余的代碼復(fù)制到SDRAM執(zhí)行,但是使用SDRAM必須先對(duì)其有關(guān)SDRAM的寄存器進(jìn)行初始化,以便能使用SDRAM 主要包括寄存器: BWSCON、BANKCON0~7、REFRESH、BANKSIZE、MRSRB6~7 這些寄存器要根據(jù)相應(yīng)的單板進(jìn)行設(shè)置,如下為Mini2440默認(rèn)設(shè)置 0x22011110, //BWSCON span style= font-family:Comic Sans MS;font-size:12px; /span 0x0000070
[單片機(jī)]
<font color='red'>Mini2440</font> SDRAM、NAND、MMU
linux2.6.32.2 mini2440平臺(tái)移植-- 激活 RTC 驅(qū)動(dòng)
RTC的英文全稱是Real-Time Clock,翻譯過來是實(shí)時(shí)時(shí)鐘芯片. RTC是PC主板上的晶振及相關(guān)電路組成的時(shí)鐘電路的生成脈沖,RTC經(jīng)過8254電路的變頻產(chǎn)生一個(gè)頻率較低一點(diǎn)的OS(系統(tǒng))時(shí)鐘TSC,系統(tǒng)時(shí)鐘每一個(gè)cpu周期加一,每次系統(tǒng)時(shí)鐘在系統(tǒng)初起時(shí)通過RTC初始化。8254本身工作也需要有自己的驅(qū)動(dòng)時(shí)鐘(PIT)。 1.2.1 在初始化文件中加入 RTC 設(shè)備結(jié)構(gòu) Linux-2.6.32.2 內(nèi)核對(duì) 2440 的 RTC 驅(qū)動(dòng)已經(jīng)十分完善了,但并未在 mach-mini2440.c 中的設(shè)備集中加入它,因此并沒有被激活,加入 RTC 結(jié)構(gòu)體如下紅色字體: ;在 mini2440 設(shè)備集中加入 RTC
[單片機(jī)]
mini2440 簡(jiǎn)單nandflash驅(qū)動(dòng)代碼記錄(2.6.32.2內(nèi)核)
#include linux/module.h #include linux/types.h #include linux/init.h #include linux/kernel.h #include linux/string.h #include linux/ioport.h #include linux/platform_device.h #include linux/delay.h #include linux/err.h #include linux/slab.h #include linux/clk.h #include linux/cpufreq.h #include linux/mtd/m
[單片機(jī)]
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

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

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 砀山县| 麻江县| 页游| 屯留县| 隆子县| 古丈县| 稷山县| 盈江县| 渭南市| 蕉岭县| 军事| 绥中县| 甘南县| 茶陵县| 庆安县| 新绛县| 东阳市| 武川县| 尚义县| 白水县| 安阳市| 兴城市| 青海省| 阿拉善右旗| 宜兴市| 定兴县| 永靖县| 宝兴县| 枣强县| 定结县| 泗阳县| 阜康市| 泸州市| 连城县| 玛纳斯县| 潞西市| 北宁市| 察雅县| 冷水江市| 化隆| 汉源县|