⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 freescale.txt

📁 用飞思卡尔写的胎压测试相关程序用8位芯片写的
💻 TXT
📖 第 1 页 / 共 2 页
字号:
freescale控制器开发困境

[ 2006-5-31 21:29:38 | By: 晒太阳的小猪 ]

 

从去年1月中旬开始,本人开始接触freescale的控制器,是mc9s12dg128.我们教研室从来没有人搞过freescale的单片机,导师想做一次尝试,就从我开始了。

买了清华的那套开发套具,感觉:贵,太贵了!就是一块板子,一个下载器而已。资料除了在freescale的官方网站可以看到的datasheet和应用文档之外,几乎什么都没有。例程好像只有1,2个。比较现在卖的s3c44b0x arm开发板,简直就是天壤之别。只有自己琢磨了。</P><BR><P>搜集了好久,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样片,就没有得到过回复。</P><BR><P>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 + -