音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

輕松入門開發(fā)ARM程序(為初學(xué)者寫的入門手冊(cè))-14-

作者:liuq 欄目:MCU技術(shù)
輕松入門開發(fā)ARM程序(為初學(xué)者寫的入門手冊(cè))-14-
從上面的STR710-LED的啟動(dòng)程序清單中我們可以看到,啟動(dòng)程序執(zhí)行以下任務(wù):
    定義了CSPR寄存器中處理器模式控制字段的值和中斷控制字段值;
    定義了EIC、EMI、GPIO、APB1和APB2的基地址和相關(guān)控制寄存器的偏移量;
    定義了各種處理器模式的堆棧;
    定義了初始化EIC和外部設(shè)備的2個(gè)宏;
    決定是否重映射;
    加載各處理器模式的堆棧指針
    跳轉(zhuǎn)到C的庫(kù)程序?main
上面STR710-LED的啟動(dòng)程序在很多情況下是可以通用的,幾乎不做任何修改就可以用于其他項(xiàng)目。當(dāng)然有時(shí)候也需要做一定的修改才能使用。建議初學(xué)者先直接引用這個(gè)啟動(dòng)程序,等到熟悉以后再根據(jù)項(xiàng)目需要做修改。

② 71x_vect.s
   71x_vect.s建立Reset、異常中斷處理程序以及外設(shè)中斷的向量表,初學(xué)者可以直接引用這個(gè)啟動(dòng)程序。

③ 71x_it.c和71x_it.h
   71x_it.c中包含所有中斷服務(wù)程序的空函數(shù),用戶可以選擇加進(jìn)自己的中斷服務(wù)程序。就象前面介紹的。

④ 71x_cofg.h
   71x_cofg.h是目標(biāo)系統(tǒng)配置文件,它是用戶開發(fā)自己的項(xiàng)目時(shí)唯一要修改的文件。用戶應(yīng)根據(jù)目標(biāo)板上使用到的芯片資源定制自己的項(xiàng)目配置文件,方法是刪除使用設(shè)備前面的注釋。注意,在STR710-LED例子中沒有利用71x_cofg.h。請(qǐng)看下面例子:

#ifndef __71x_CONF_H
#define __71x_CONF_H
/* Comment the LINE below to put the library in release mode */
#define DEBUG         
#define inLINE inLINE

/* 系統(tǒng)不用的設(shè)備名前加注釋 */
#define _ADC12                          /* 啟用ADC12 */

/* #define _APB */
/* #define _APB1 */
/* #define _APB2 */
/* #define _BSPI */
/* #define _BSPI0 */
/* #define _BSPI1 */
/* #define _CAN */
/* #define _EIC */
/* #define _EMI */
/* #define _FLASH */

#define _GPIO                           /* 啟用GPIO 0和1 */
#define _GPIO0
#define _GPIO1
/* #define _GPIO2 */
/* #define _I2C */
/* #define _I2C0 */
/* #define _I2C1 */

#define _PCU                            /* 啟用PCU */
#define _RCCU                           /* 啟用RCCU */

/* #define _RTC */
/* #define _TIM */
/* #define _TIM0 */
/* #define _TIM1 */
/* #define _TIM2 */
/* #define _TIM3 */

/* #define _UART */
/* #define _UART0 */
/* #define _UART1 */
/* #define _UART2 */
/* #define _UART3 */
/* #define _USB */
/* #define _WDG */
/* #define _XTI */
/* #define _IRQVectors */

#endif /* __71x_CONF_H */

       在這個(gè)例子中我們?yōu)槟繕?biāo)系統(tǒng)配置了ADC12、GPIO0、GPIO1、 PCU和RCCU這幾個(gè)設(shè)備。

⑤ 71x_map.h
在71x_map.h文件中以結(jié)構(gòu)體的形式定義片上外部設(shè)備的控制、狀態(tài)和數(shù)據(jù)寄存器。我們以12位A/D為例:
    定義AD轉(zhuǎn)換器寄存器組的結(jié)構(gòu)如下:   
typedef volatile struct
{
          vu16 DATA0;
          vu16 EMPTY1[3];        // EMPTY是寄存器之間的空地址單元(6個(gè)字節(jié))
          vu16 DATA1;
          vu16 EMPTY2[3];
          vu16 DATA2;
          vu16 EMPTY3[3];
          vu16 DATA3;
          vu16 EMPTY4[3];
          vu16 CSR;
          vu16 EMPTY5[7];
          vu16 CPR;
} ADC12_TypeDef;

    定義A/D轉(zhuǎn)換器寄存器組的基地址
因?yàn)锳/D轉(zhuǎn)換器連接在APB2總線上,先定義APB2的基地址
#define APB2_BASE       0xE0000000

然后根據(jù)偏移量定義A/D轉(zhuǎn)換器寄存器組結(jié)構(gòu)體的基地址
#define ADC12_BASE  (APB2_BASE + 0x7000)

⑥ 71x_lib.c
71x_lib.c根據(jù)用戶的配置文件(71x_conf.h)自動(dòng)初始化目標(biāo)系統(tǒng)啟用的外設(shè)指針。仍以A/D轉(zhuǎn)換器為例,見下面:
   
       #ifdef _ADC12
            ADC12 = (ADC12_TypeDef *) ADC12_BASE
       #endif
    

此后用戶在應(yīng)用程序中需要引用A/D轉(zhuǎn)換器的某個(gè)寄存器時(shí)只需用以下方法即可:
ADC12->CSR  = 0x00 ;  

⑦ 71x_lib.h
71x_lib.h根據(jù)用戶的配置文件(71x_conf.h)包含需要訪問的頭文件,還是以ADC12舉例來(lái)說(shuō)明。如果我們?cè)?1x_conf.h中配置了AD轉(zhuǎn)換,即刪除了#define _ADC12前的注釋。那么在71x_lib.h中有:
       
#ifdef _ADC12
            #include “adc12.h”
        #endif

注意:  在71x_conf.h中是否保留語(yǔ)句 #define DEBUG決定在最后生成的目標(biāo)文件中是初始化所有外部設(shè)備還是僅初始化被啟用外部設(shè)備的控制和狀態(tài)寄存器的結(jié)構(gòu)體指針。
     
3.如何利用ST源程序著手編寫應(yīng)用程序
寫到這里相信大家已經(jīng)看出著手編寫ST STR710的應(yīng)用程序是多么容易了。為了清晰起見,我們把流程列在下面:
① 建議備份ST的01STR71x軟件包,以防無(wú)意修改或破壞。
② 建立新工作區(qū)和新項(xiàng)目,并根據(jù)前面介紹設(shè)置項(xiàng)目選件。
③ 給項(xiàng)目添加文件。必須添加的文件有:
71x_init.s   (注:在項(xiàng)目下建立一個(gè)startup組,把71x_init.s和71x_vect.s放在此組)      
71x_vect.s
71x_it.c     (注:如不需要定時(shí)器1的中斷處理,就把void T1TIMI_IRQHandler(void)函數(shù)內(nèi)部寫空)
71x_lib.c
目標(biāo)系統(tǒng)所用到設(shè)備驅(qū)動(dòng)c程序;
④ 在連接器指向的include目錄中,必須包含以下文件
71x_it.h
71x_map.h
71x_type.h
71x_conf.h
71x_lib.h
至少包含目標(biāo)系統(tǒng)所用到設(shè)備的頭文件(﹡.h),一般include目錄應(yīng)包含所有頭文件;
⑤ 根據(jù)用戶目標(biāo)系統(tǒng)的外設(shè)配置要求修改71x_cong.h文件,根據(jù)要求注釋或釋放#define DEBUG預(yù)處理命令;
⑥ 添加或編寫用戶自己的main主程序,在程序頭上添加語(yǔ)句 #include 71x_lib.h,在程序中調(diào)用ST提供的外設(shè)驅(qū)動(dòng)程序完成自己的操作需求。

01STR71x軟件包中有很多單個(gè)的片上外設(shè)的例子,初學(xué)者可以去再試驗(yàn)和了解如何操作這些設(shè)備。用戶可以打開01STR71x\STR71xLibrary\examples目錄下的examples.eww工作區(qū)文件。然后在工作區(qū)窗口下的書簽?zāi)夸浿羞x擇針對(duì)各片上外設(shè)的項(xiàng)目,進(jìn)行編譯、連接和調(diào)試。調(diào)試過程中可以打開主程序窗口和Watch窗口,同時(shí)單步運(yùn)行程序并觀察變量的變化。

還有一點(diǎn)提示:由于ARM結(jié)構(gòu)不提供位操作指令,所以對(duì)寄存器的位置位和位清除可以用下面語(yǔ)句形式實(shí)現(xiàn)。
GPIO0 -> PC0  |= 1<<3;                   // 將GPIO0的PC0控制寄存器的bit 03置1
GPIO0 -> PC0  |= 0x0008;                 // 與上面一句的結(jié)果一樣
EMI -> BCON0 = 0 | (1<<15) | (0x01<<2) |1;   // 將BCON0寄存器的bit 15,bit 2和bit 0置1,其// 他位置0。



2樓: >>參與討論
gyt
謝謝
收下了

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
請(qǐng)高人推薦幾款合適的ARM芯片
無(wú)接點(diǎn)能量數(shù)據(jù)傳輸IC FPT106
什么是 DDC  ???
STR912兩問
誰(shuí)有ST7中文資料?
免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)