?? freescale.txt
字號:
freescale控制器開發困境
[ 2006-5-31 21:29:38 | By: 曬太陽的小豬 ]
從去年1月中旬開始,本人開始接觸freescale的控制器,是mc9s12dg128.我們教研室從來沒有人搞過freescale的單片機,導師想做一次嘗試,就從我開始了。
買了清華的那套開發套具,感覺:貴,太貴了!就是一塊板子,一個下載器而已。資料除了在freescale的官方網站可以看到的datasheet和應用文檔之外,幾乎什么都沒有。例程好像只有1,2個。比較現在賣的s3c44b0x arm開發板,簡直就是天壤之別。只有自己琢磨了。&lt;/P&gt;<BR>&lt;P&gt;搜集了好久,google,baidu,才算找到了一點點資料。在這里推薦一個論壇:bbs.chinaecnet.com,在這里有個freescale的論壇,好像是國內最好的freescale控制器的論壇了。感覺freescale做的宣傳,公司的產品推廣做得真得很差經。到現在mc9s系列的控制器幾乎沒有相應的中文資料,沒有相應的開發說明、硬件設計、軟件設計。只有一本清華出版的《單片機嵌入式應用的在線開發方法》,書里面也沒有多少對初學者合適的內容。與msp430的推廣相比,相差很遠。
關于開發工具,官方正版的開發包,軟件硬件就不說了,貴得要命。清華的那個我買了。編譯軟件是cw2.0,調試軟件是cw4.1,不算方便。還受限制。到網絡上邊找了很久,也沒有找到其他版本的,就是freescale官方網站的下載連接也是無法打開。有一個蘇州大學女生,她那里有cw3.1,我想要的。可是嘗試了多種方法,qq,ftp都無法傳送過來,郁悶死了。后來昨天,聯系到了我校創新院的同學,參加freescale杯全國大學生智能車大賽的,他把cw3.1給了我。今天在清華大學為這次比賽開設的一個ftp上邊也找到了該調適工具。感覺在網絡上邊找點mc9s12相應的資料,真的好難啊!
關于樣片:在freescale官方網站申請多次,從來沒有成功過。后來從一個代理商那里申請到9s12dp256的樣片。之后,同教研室的同學申請9s12dg128樣片,就沒有得到過回復。&lt;/P&gt;<BR>&lt;P&gt;freescale就不能學習學習ti的msp430,做好9s12產品的推廣么?
今后的文章,本人會把對于freescale的9s系列單片機的學習所得寫到這里。供大家享用!也請志同道合者,一同努力,做點資源共享的工作!
uc/os-ii on 9s12dg128
[ 2006-6-2 20:52:12 | By: 曬太陽的小豬 ]
3個月前就想把uc/os-ii移植到mc9s12dg128上,這段時間以來,怎么嘗試都沒有成功。在uc/os-ii的官方網站上邊有一個移植到68hc12的,我看了看,修改過,沒有成功。清華的開發文檔里邊有一個移植范例,按照他的說明,使用串口下載調試,同樣沒有什么反應,拿bdm做調適,結果相同。一直持續到了今天,依然沒有結果。
哪位大蝦移植成功呢?可否把范例共享一下,順便講講怎么調試呢?萬分感謝!
飛思卡爾S12XE 16位汽車MCU雙倍提高存儲器容量[轉載]
[ 2006-6-3 11:45:13 | By: 曬太陽的小豬 ]
飛思卡爾半導體公司通過擴展其高性能S12X 16位微處理器(MCU)產品系列,為汽車車身和
多工應用的設計者提供增強的系統完整性和更高的集成度。高級S12XE MCU系列擁有更多的
存儲器選擇,可在一種產品中提供更加出色的
功能,并且降低整體系統成本。
作為一種領先設備,S12XEP100 在S12X系列的基礎上將存儲器容量提高一倍,達到1MB
,顯著提高了MCU在各種應用中的性能,包括中央車身控制、儀表檢測、車門模塊和底盤節
點。高級208 MAP BGA套件提供比以前更多的輸入/輸出端口。
S12XE基于廣泛使用的HCS12產品系列,提供一些先進功能,使當前的HCS12 用戶能夠保
持他們在軟件和系統設計方面的投資的價值。同時,它還在功能方面有一個飛躍,能夠滿足
下一代車輛電子系統的需求。S12X MCU提供從16K到1MB的閃存,是市場上存儲容量跨度最大
的產品之一。 S12XE系列采用領先的0.18微米處理技術,可以擴大存儲區,在更小的芯片尺
寸上支持更多的外圍設備模塊。
S12XE系列包括一個存儲器保護單元(MPU),用于防止軟件中的系統錯誤。這個MPU解
決了不同模塊之間的錯誤交互導致的潛在問題。這項特性在汽車設計中非常關鍵,因為它有
助于最大程度地控制汽車中的系統故障的擴散。
S12XE系列采用了提高性能的XGATE協處理器模塊。該模塊是很多汽車S12X項目中必不可
少的元件并提供多種功能,比如顯示驅動、先進脈沖調制(PWM)功能和中斷處理。 XGATE
可以顯著降低CPU的負荷,使CPU能夠集中資源運行關鍵的系統活動,從而縮短響應時間。
憑借XGATE的多功能性,制造商能為其設計增加更多的創新特性。
加快系統開發
多家廠商提供了第三方硬件和軟件工具。設計人員還可以采用現有的HCS12工具進行
S12XE開發。除了演示和開發工具外,飛思卡爾還提供全面的技術支持,包括參考設計、應
用注釋和在線教程,所有這些都是為了縮短開發時間。如需獲得更多設計信息和軟件,請訪
問:www.freescale.com/files/pr/s12xe.html。
產品供貨情況
飛思卡爾半導體提供完整系列的S12X設備,帶有不同數量的閃存,具備專用功能。
1MB的S12XEP100設備目前正在取樣,可以實現整個S12XE系列的100%仿真,低至128K容量的
設備。包括評估板和C編譯器在內的一系列開發工具有望在本月晚些時候推出
freescale mc9s12dg128/dp256 atd程序-1
[ 2006-6-6 19:27:56 | By: 曬太陽的小豬 ]
我調試過的一個atd程序,自己看吧
//作者:曬太陽的小豬
//個人blog:http://emcu.c51bbs.com
//轉載使用請注明
#i nclude <hidef.h>
#i nclude <string.h>
/* global variables definitions */
static long ADValue;
void AD_Init(void) //初始化
{
ATD0CTL2=0xC0; //AD模塊上電, 快速清零, 無等待模式, 禁止外部觸發, 中斷禁止
ATD0CTL3=0x20; // 每個序列4次轉換, No FIFO, Freeze模式下繼續轉換
ATD0CTL4=0x83; // 8位精度, 2個時鐘, ATDClock=[BusClock*0.5]/[PRS+1] ; PRS=3, divider=8
ATD0CTL5=0xA6; //右對齊無符號,單通道采樣,通道6
ATD0DIEN=0x00; // 禁止數字輸入
}
void AD_GetValue(void) //讀取AD轉換結果
{
ADValue = ATD0DR0; //Read out the Result Register
}
void main(void) {
AD_Init(); //AD初始化
DDRB = 0xFF;
PORTB = 0x00;
//EnableInterrupts;
for(;;)
{
while(!(ATD0STAT1 & 0x01)); //等待轉換結束
AD_GetValue(); //讀取轉換結果
PORTB = (char)ADValue; //在B口顯示轉換值
}
}
freescale mc9s12dg128/dp256 atd程序2
[ 2006-6-6 19:41:37 | By: 曬太陽的小豬 ]
我調試過的一個atd程序,自己看吧
//作者:曬太陽的小豬
//個人blog:http://emcu.c51bbs.com
//轉載使用請注明
static long ADValue;
void AD_Init(void) //初始化
{
ATD0CTL2=0xC2; //AD模塊上電, 快速清零, 無等待模式, 禁止外部觸發, 中斷允許
ATD0CTL3=0x20; // 每個序列4次轉換, No FIFO, Freeze模式下繼續轉換
ATD0CTL4=0x83; // 8位精度, 2個時鐘, ATDClock=[BusClock*0.5]/[PRS+1] ; PRS=3, divider=8
ATD0CTL5=0xA6; //右對齊無符號,單通道采樣,通道6
ATD0DIEN=0x00; // 禁止數字輸入
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt void AD0_ISR(void)
{
ADValue = ATD0DR0; //Read out the Result Register
}
void main(void) {
AD_Init(); //AD初始化
DDRB = 0xFF;
PORTB = 0x00;
EnableInterrupts;
for(;;)
{
// while(!(ATD0STAT1 & 0x01)); //等待轉換結束
//AD_GetValue(); //讀取轉換結果
PORTB = (char)ADValue; //在B口顯示轉換值
}
}
freescale mc9s12dg128/dp256 cop程序
[ 2006-6-6 19:45:56 | By: 曬太陽的小豬 ]
cop程序,自己看吧
//作者:曬太陽的小豬
//個人blog:http://emcu.c51bbs.com
//轉載使用請注明
#i nclude <hidef.h>
#i nclude <string.h>
static int waittime = 0;
static long absoluteTime = 0;
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt void COP_ISR(void){
//DisableInterrupts;
waittime++;
if(waittime>=200) waittime=0;
PORTB = waittime;
}
#pragma CODE_SEG DEFAULT
static void COPInit(void) {
COPCTL = 0X07;
}
void main(void)
{
DDRB = 0xFF;
PORTB =0X0F;
COPInit();
// EnableInterrupts;
while(1)
{
ARMCOP = 0X55;
ARMCOP = 0XAA;
//在程序中,如果沒有上邊這2行,看門狗會自動使系統復位
//如果添加了這2行,看門狗不能使系統復位
PORTB = 0x00;
for(absoluteTime=0;absoluteTime<10000;absoluteTime++);
PORTB = 0xFF;
for(absoluteTime=0;absoluteTime<10000;absoluteTime++);
}
}
freescale mc9s12dg128/dp256 ect例程
[ 2006-6-7 12:26:34 | By: 曬太陽的小豬 ]
//作者:曬太陽的小豬
//個人blog:http://emcu.c51bbs.com
//轉載使用請注明
#i nclude <hidef.h>
#i nclude <string.h>
static int waittime = 0;
static long absoluteTime = 0;
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt void ECT_ISR(void){
TFLG1 = 0x01;
waittime++;
if(waittime>=200) waittime=0;
PORTB = waittime;
}
#pragma CODE_SEG DEFAULT
static void ECTInit(void) {
TIOS = 0x81; //這句話必須寫在前邊,不然無法把數據寫入TC0,TC7
TC0H = 0x77; // Store given value to the compare register
TC0L = 0x88;
TC7H = 0x77; // Store given value to the modulo register
TC7L = 0x88;
TSCR2 = 0x0f; // 把TSCR2中TCRES置位,定時器計數達到TC7數值后,自動復位tore given value to the prescaler
TFLG1 = 0x01; // Reset interrupt request flag
TIE = 0x01; // Enable interrupt
TIOS = 0x01;
TSCR1 = 0X80; // Enable Timertimer enable
}
void main(void) {
DDRB = 0xFF;
PORTB = 0x00;
PORTB = 0xFF;
ECTInit();
EnableInterrupts;
while(1)
{
absoluteTime++;
if(absoluteTime==5000000)
DisableInterrupts;
}
}
freescale mc9s12dg128/dp256 eeprom程序
[ 2006-6-7 12:31:12 | By: 曬太陽的小豬 ]
freescale mc9s12dg128/dp256 eeprom程序
做實驗的時候寫的一些代碼。沒有好好整理,一定好用。
//作者:曬太陽的小豬
//個人blog:http://emcu.c51bbs.com
//轉載使用請注明
#i nclude <hidef.h>
#i nclude <string.h>
static int waittime = 0;
static int changshu = 0;
static unsigned char flag = 0;
static unsigned int i = 0;
static unsigned int EEPROMValue;
unsigned char *erase;
unsigned int *eeaddr;
unsigned int *ramaddr;
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt void ECT_ISR(void){
TFLG2 = 0x80;
waittime++;
if(waittime>=200) waittime=0;
PORTB = waittime;
}
#pragma CODE_SEG DEFAULT
static void ECTInit(void) {
TSCR2 = 0x87; //prescale factor is 8, bus clock/128=8Mhz/8
//timer overflow interrupt enable
TSCR1 = 0x80; //timer enable
}
static void COPInit(void) {
COPCTL = 0X07;
}
void main(void)
{
waittime=0; //注意在主程序上電過程中的初始化
i=0;
flag = 1;
DDRB = 0xFF;
PORTB = 0x00;
/* erase=(volatile unsigned char*)(0x800);
ECLKDIV=0x4F;
PORTB = 0x0f;
while(erase<=(volatile unsigned char*)(0xfb0)){
while(!(ECLKDIV & 0x80)){}
while(!(ESTAT & 0x80)){}
while(!(EPROT & 0x80)){}
any=0xff;
ECMD=0x40;
ESTAT|=0x80;
while(!(ESTAT & 0x40)){}
erase+=4;
}
while(1){}
*/
changshu = 0x55;
for(i=0;i<50000;i++);
PORTB = 0xff;
for(i=0;i<50000;i++);
PORTB = 0x00;
DDRA = 0x00;
if(PORTA & 0x80)
{
while(1)
{
PORTB=any;
}
}
else
{
ECLKDIV=0x4B;
while(!(ECLKDIV & 0x80)){}
while(!(ESTAT & 0x80)){}
while(!(EPROT & 0x80)){}
any=0xff;
ECMD=0x41;
ESTAT|=0x80;
while(!(ESTAT & 0x40)){}
eeaddr=(volatile unsigned int*)(0x800);
while(!(ECLKDIV & 0x80)){}
while(!(ESTAT & 0x80)){}
while(!(EPROT & 0x80)){}
*eeaddr=0x0302;
ECMD=0x20;
ESTAT|=0x80;
while(!(ESTAT & 0x40)){}
EEPROMValue =any;
}
}
freescale mc9s12dg128/dp256 IO中斷程序
[ 2006-6-7 12:36:21 | By: 曬太陽的小豬 ]
freescale mc9s12dg128/dp256 IO中斷程序
//作者:曬太陽的小豬
//個人blog:http://emcu.c51bbs.com
//轉載使用請注明
//此程序為PORTP7用作中斷試驗。設置為輸入,下降沿處發中斷
//在中斷處理程序中,禁止PORTP7中斷輸入
#i nclude <hidef.h>
#i nclude <string.h>
static int waittime = 0;
static long absoluteTime = 0;
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt void PORTP_ISR(void){
//DisableInterrupts;
PIEP = 0X00; //禁止再次產生中斷
PIFP = 0x80; //清中斷標志位
waittime++;
if(waittime>=200) waittime=0;
PORTB = waittime;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -