📄 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 + -