HEW自動(dòng)生成文件介紹_第1頁
HEW自動(dòng)生成文件介紹_第2頁
HEW自動(dòng)生成文件介紹_第3頁
HEW自動(dòng)生成文件介紹_第4頁
HEW自動(dòng)生成文件介紹_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Ml6c族單片機(jī)編程入門

作者:快樂水牛

M16C族或片機(jī)為原二菱電機(jī)生產(chǎn)的16位CISC微控制器.

主要特點(diǎn)為:

低電壓.低功耗.抗干擾性強(qiáng)

具符大容f*FLASHROM,SRAM

豐富的外設(shè).如定時(shí)牌.AD.DA.CAN控制器等

Wr有這些特性,使Ml6c廠泛應(yīng)用汽車,電動(dòng)軍,工業(yè)設(shè)備及家電嚴(yán)必上.

下面投們講講如何在M16C平臺(tái)下編程.

1,使用HEW新建一個(gè)工程。

打開HEW,選擇Createanewprojectworkspace.點(diǎn)OK.

選拜CPUfamily,這里我們選杼Ml6c選項(xiàng)。

工具圾Toolchain我的默認(rèn)選擇RenesasM16CStandard.

好了,接卜來我們要輸入一個(gè)工程名字,在workspacename里輸入ml6c_test,

接下來.注意.也是最重要的一步,在左邊的projecttypes下面,我們選擇CsourcestartupApplication這個(gè)選項(xiàng),該選項(xiàng)的含義是你將建

立?個(gè)C語占開始的工程.當(dāng)然.如果這持第Application.則為匯編語占開始的工9

考慮到大多數(shù)朋友對(duì)Ml6c的匯編不是很熟悉,我們這中以C語言工程為參考.

點(diǎn)確定后,繼續(xù)選抒I:只鏈依本5.43.0C.CPUSeries我選擇為M16C/60,CPUGroup我選擇為6N4.然后點(diǎn)next,繼續(xù)點(diǎn)next使用默認(rèn)選

項(xiàng),最后選擇targets為M16CE8aSYSTEM,這是是你的CPU嬰用到的仿真器,我們一般使用埔薩產(chǎn)的小獷ONChipdebugger仿此器E8a.

點(diǎn)next,最后點(diǎn)Finish.OK.我們的一個(gè)C語吉工程已經(jīng)建好了.

2.工和雙文件分析

我們發(fā)現(xiàn)我們建的ml6c_test工程里面有?些源代碼文件.卜面我們對(duì)這些文件進(jìn)行分析.

(注憊:建立工程時(shí),選擇不同的選項(xiàng)可能會(huì)產(chǎn)生不同的源代碼文件,不過這不影響我們的使用)

ml6c_test.c

源代碼:

/******************?**********/

voidmain(void)

該文件是main。函數(shù).你的所有應(yīng)用函數(shù)都會(huì)在maln()里圜用

resetprg.c

源代碼:

#indude"sfr6n4.h"

*include-typedefine.h"

#indude"resetprg.h"

extern_UINT_stack_top,_istack_top;

//DEF_BANKSELECT;

DEFSBREGISTER:

#pragmaentrystart

voidstart(void);

externvoidinitsct(void);

externvoidJnit(void);

voidexit(void);

voidmain(void);

#pragmasectionprograminterrupt

voidstart(void)

<

_lsp_=&_istack_top;//setinterruptstackpointer

prcr=0x02;//changeprotectmoderegister

pmO=0x00;//setprocessormoderegister

prcr-0x00;//changeprotectmoderegister

_flg_=_F_value_;//setflagregister

#if_STACKSIZE_!?O

_sp_=&_stack_top;//setuserstackpointer

#endif

_sb__0x400;U40011fixotion(Donotchongc)

//setvariablevector'saddress

_asm("Ide#((topofvector)>>16)&0FFFFh,INTBH");

_asm("Ide#(topofvector)&OFFFFh,INTBL");

initsct();//initializeeachsections

#if_HEAPSIZE_1=0

heap_lnit();//Initializeheap

#endif

#if_STANDARD」O_!=0

Jnit();//initializestandardI/O

#endif

_fb_-0;//initializeFBregistefordebugger

main();//callmainroutine

exit();//callexit

)

voidexit(void)

(

whilefl);//infiniteloop

)

該文件為上電復(fù)位處理

start。為CPU上電更位后執(zhí)行的第一個(gè)函數(shù),我們可以在這里設(shè)置中斷棧指針寄存器,處理器模式等“呆終它將啊用main。函數(shù),

intprg.c

源代碼:

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

#include"sfr6n4.h"

#include"cstartdef.h"

//BRK(softwareInt0)

#pragmainterrupt_brk(vect=O)

void_brk(void){}

//canO/1wakeup(so代wareint1)

#pragmainterrupt_canO(vect=l)

void_canO(void){}

//canOreceive(softwareint2)

#pragmainterrupt_canO_receive(vect=2)

void_ranC_ra「aiva(vcid){}

//canOtrance(softwareInt3)

#pragmainterrupt_can0_trance(vect=3)

void_canO_trance(void)<)

//____

//INT3(softwareint4)

#pragmainterrupt_int3(vect=4)

voidJnt3(void){}

//TIMERB5(softwareInt5)

#pragmainterrupt_timer_b5(vcct-5)

void_timer_b5(void){}

//TIMERB4.UART1buscollision(softwareint6)

#pragmainterrupt_timer_b4(vect=6)

void_timer_b4(vold){}

//TIMERB3.UART0buscollision(softwareint7)

#pragmainterrupt_tlmer_b3(vect=7)

void_timer_b3(void){}

//____

//canlreceive/INT5(softwareint8)

#pragmainterrupt_canl_receive(vect=8)

void_canl_recelve(void){}

//SI/O3/canltrance(softwareint9)

#pragmainterrupt_canl_trance(vect=9)

void_canl_trance(void){}

//UART2BusCollision(softwareint10)

#pragmainterrupt_u2_bus_collision(vect=10)

void_u2_bus_collision(void)<>

//DMAO(softwareint11)

#pragmainterrupt_dmaO(vect=ll)

void_dma0(void){}

//DMA1(softwareint12)

#pragmainterrupt_dmal(vect=12)

void_dmal(void){}

//canO/1error(softwareint13)

#pragmainterrupt_canO_error(vect=13)

void_canO_error(void)<)

//timerbO(softwareint26)

#pragmainterrupt_timer_b0(vect=26)

void_timer_bO(void){}

//timerbl(softwareint27)

#pragmainterrupt_timer_bl(vect=27)

void_timer_bl(void){}

//timerb2(softwareint28)

#pragmainterrupt_tlmer_b2(vect=28)

vniri_timer_h?(void){}

//____

//into(softwareint29)

*pragmainterrupt_int0(vect=29)

void_intO(void){}

U___

//inti(softwareint30)

#pragmainterrupt_intl(vect=3O)

void_intl(void){}

//____

//int2(softwareint31)

#pragmainterrupt_int2(vect=31)

voidJnt2(void){}

//softwareint32foruserorMR30

//softv/areint33foruserorMR30

//softwareint34foruserorMR30

//softv/areint35foruserorMR30

//softwareint36foruserorMR30

//softv/areint37foruserorMR30

//softwareint38foruserorMR30

//softwareint39foruserorMR30

//softv/areint40foruserorMR30

//softwareint41foruserorMR30

//softwareint42foruserorMR30

//softwareint43foruserorMR30

//so代v/areint44foruserorMR30

//softwareint45foruserorMR30

//softwareint46foruserorMR30

//softv/areint47foruserorMR30

//softwareint48foruser

//softwareint49foruser

//softv/areint50foruser

//softv/areint51foruser

//softv/areint52foruser

//softv/areint53foruser

//softwareint54foruser

//softwareint55foruser

//softwareint56foruser

//softwareint57foruser

//softwareint58foruser

//softv/areint59foruser

//softwareint60foruser

//softv/areint61foruser

//softwareint62foruser

H<;aftwarpint63foruqar

該文件為中斷處理子程序.

我們以中口0接收中斷為例

//uartOreceive/ACKO(softwareint18)

#pragmainterrupt_uartO_receive(vect=18)

void_uartO_receive(void){}

如上,

#pragmainterrupt_uartO_receive(vect=18)

#pragma為預(yù)處理指令,該語句表不Ml6c的編詫器將_uartO_receive()函數(shù)指定為一個(gè)中斷子函數(shù),向量2為18(可以對(duì)照CPU的快件手冊(cè)

查右串口0接收中斷的向質(zhì)號(hào))

initsct.c

源代碼;

#indude"initsct.h"

voidinltsct(void);

voidinitsct(void)

(

sclear("bss_SE","data","align");

sclear("bss_SO","data","noalign");

sclear("bss_NE","data","align");

sclear("bss_NO","data",-noalign");

sclear_f("bss_FE"/data",-align");

sclear_f("bss_FO"/"data","noalign";;

//addnewsections

//bss_clear("newsectionname");

scopyC-data.SE"/'data","align");

scopy("data_SO","data","noalign").

scopy("data_NE","data","align");

scopy("data_NO"/data","noallgn"):

scopy_f("data_FE",'data",'align");

scopy_f("data_FO","data","noalign");

)

該文件為bss,data段的初始化,

共中bss為未初始化數(shù)據(jù).data為初始化「的數(shù)據(jù)

調(diào)用initsct。函數(shù)時(shí),CPU會(huì)將bss段泮零,將ROM里的初始化數(shù)據(jù)復(fù)制到data段里。

heap.c

源代碼:

/***************************;?*/

#include"typedefine.h"

#include"cstartdef.h"

#if_HEAPSIZE_!=0

#pragmaSECTIONbssheap

_URYTFhpan_arpa[_HFAPST7F_];

#endif

該文件為堆的定義.malloc。等函數(shù)將會(huì)從heap_area[_HEAPSIZE_]數(shù)組里申謂空間.

當(dāng)然,你可以定義堆的大小.

fvector.c

雙代碼?

#pragmasectaddressfvector,ROMDATAOxfffdc

#pragmainterrupt/v_dummy_int//udi

#pragmainterrupt/v_dummy_int//over_flow

#pragmainterrupt/v_dummy_int//brki

#pragmainterrupt/v_dummy_int//address_match

#pragmainterrupt/v_dummy_int//single_step

#pragmainterrupt/v_dummy_int//wdt

#pragmainterrupt/v_dummy_int//dbc

#pragmainterrupt/v_dummy_int//nmi

#pragmainterrupt/vstart

_asmC.id""V#FFFFFFFFFFFFFF\"");

#pragmainterrupt_dummy_int()

void_dummy_lnt(void){}

該文件為fixedvectortable的定義,關(guān)于fixedvector向量,可以fit石CPU的硬件『冊(cè).?佞不用更改該文件

**

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論