历史上的今天
返回首页

历史上的今天

今天是:2024年08月23日(星期五)

正在发生

2021年08月23日 | 飞思卡尔XS128的基本模板程序

2021-08-23 来源:eefocus

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

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

#include       /* common defines and macros */

#include "derivative.h"      /* derivative-specific definitions */

#include      /* derivative information */

 

//1M=1006080

 

//40MHz BUS_CLOCK

/*

#define SynrDefine 0x53

#define RefdvDefine 0x07         //时钟频率等于2*晶振频率*(SYNR0+1)/(REFDV0+1)

#define SciDefine 0x106          //串行总线频率=时钟频率/(16*SCI0BDL)

*/

//----------------------------------------------------- 

 

//80MHz BUS_CLOCK

#define SynrDefine 0xD3

#define RefdvDefine 0x03         //时钟频率等于2*晶振频率*(SYNR0+1)/(REFDV0+1)

#define SciDefine 0x20c          //串行总线频率=时钟频率/(16*SCI0BDL)

#define WAITTIME 100000           //启动延时时间

#define SpeedInterrupt 1000         //速度周期采样时间,定时1000 * 0.01ms = 10ms  

#define AdInterrupt 100             //Ad周期采样时间,定时100 * 0.01ms = 1ms 

int SpeedNow=0;                  //速度采样初始化

int sensor_ad[5]=0;                //i=0~4,AD数据采样结果

//----------------------------------------------------- 

 

//92MHz BUS_CLOCK

/*

#define SynrDefine 0xD6

#define RefdvDefine 0x03         //时钟频率等于2*晶振频率*(SYNR0+1)/(REFDV0+1)

#define SciDefine 0x25a          //串行总线频率=时钟频率/(16*SCI0BDL)

*/

//----------------------------------------------------- 

 

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

*函数名:Wait_Time

*入口参数无

*出口参数: 无

*功能描述: 简单延迟程序

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

void Wait_Time(ulong cnt) {

    unsigned char a,b;

    while(--cnt) {

    for(b=4;b>0;b--)

        for(a=248;a>0;a--);

    }

}

//----------------------------------------------------- 

 

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

*函数名:PLL_Init

*入口参数SNNR寄存器值,REFDV0寄存器值

*出口参数: 无

*功能描述:使用PLLCLK,时钟频率=2*晶振频率*(SYNR0+1)/(REFDV0+1)

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

void PLL_Init(byte SYNR0,byte REFDV0)

{

    CLKSEL=0x00; //disable pll; 

    CLKSEL_PLLSEL = 0; 

    PLLCTL_PLLON = 0;

    SYNR = SYNR0; //

    REFDV = REFDV0; 

    PLLCTL = 0xc0; //0xC0 CME=1,PLLON=1

    PLLCTL_PLLON = 1; 

    while(!CRGFLG_LOCK); 

    CLKSEL_PLLSEL = 1;

    return; 

}

//----------------------------------------------------- 

 

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

*函数名:SCI_Init

*入口参数SCI0BD寄存器值

*出口参数: 无

*功能描述:使用SCI_Init,串行总线频率=时钟频率/(16*SCI0BDL)

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

static void SCI_Init(int SCI0) 

{

    SCI0CR1 =0x00;

    SCI0CR2 =0x2c; //enable Receive Full Interrupt,RX enable,Tx enable      

    SCI0BD  =SCI0; //SCI0BDL=busclk/(16*SCI0BDL)

                  //busclk  8MHz, 9600bps,SCI0BD=0x34

                  //busclk 16MHz, 9600bps,SCI0BD=0x68

                  //busclk 24MHz, 9600bps,SCI0BD=0x9C

                  //busclk 32MHz, 9600bps,SCI0BD=0xD0  

                  //busclk 40MHz, 9600bps,SCI0BD=0x106

}

//----------------------------------------------------- 

 

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

*函数名:Sci0Tx

*入口参数SCI0DRL寄存器值

*出口参数: 无

*功能描述: 发送串口数据

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

void Sci0Tx(unsigned char text)

{

    unsigned char temp;

    temp=SCI0SR1; /*clear flag*/

    //发送前判断SC0DR是否处于忙状态。SC0DR.7=0:处于忙状态

    while (!SCI0SR1_TDRE); /* wait for output buffer empty */

    while(!SCI0SR1_TC); //等待数据发送结束

    SCI0DRH=0;

    SCI0DRL=text;

}

//----------------------------------------------------- 

 

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

*函数名:Sci0Rx

*入口参数无

*出口参数: 串口数据

*功能描述: 接收串口数据

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

byte Sci0Rx(void)

{

    byte result,temp;

    temp=SCI0SR1; /*clear flag*/

    if((temp&0x20)>0)

    result=SCI0DRL;

    return result;

}

//----------------------------------------------------- 

 

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

*函数名:PWM_Init

*入口参数无

*出口参数: 无

*功能描述: 脉宽调制初始化( BUS_CLOCK=80M ),1口马达,6口舵机

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

void PWM_Init(void) {

 

    PWME=0x00;       //禁止PWM模块

    PWMCAE=0x00;     //全部左对齐输出

    PWMPOL=0xFF;     //全部为先输出高电平再输出低电平

    PWMCLK=0xFF;     //01级联-马达,6-舵机预分频

                     //其中CLOCK A或CLOCK SA控制0,1,4,5通道的PWM,CLOCK B或CLOCK SB控制2,3,6,7通道的PWM

    PWMPRCLK=0x22;   //CLOCK SA与CLOCK SB都进行4分频

                     //设置频率A=bus clock/4=20MHz,B=bus clock/4=20MHz

 

    PWMSCLA=0x01;    //CLOCK SA进行10分频,即20MHZ/2/1=10MHZ

    PWMSCLB=0x05;    //CLOCK SB进行10分频,即20MHZ/2/5=2MHZ

 

    PWMCTL_CON01=1;  //01级联

    PWMPER01=2500;   //输出频率的算法:SA clock/2500=4KHz;

      

    PWMDTY01=1250;   //通道01初始化占空比50%

 

    PWMPER6=2000;    //输出频率的算法:SB clock/2000=100Hz;

 

    PWMDTY6=1000;    //通道6初始化占空比50%

 

    PWME=0x22;       //打开01,6通道(只需开通高位即可)

 

}

//----------------------------------------------------- 

 

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

*函数名:PIT_Init

*入口参数无

*出口参数: 无

*功能描述: 时钟周期中断初始化程序

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

void PIT_Init(void)   

{  

    PITCFLMT_PITE=0; //关闭PIT  

 

    //微定时器的装载寄存器  

    PITMTLD0= 80-1;//8位定时器初值设定。80分频,在80MHzBusClock下,为0.1MHz,即10us=0.01ms  

    //PITMTLD1= 80-1;//8位定时器初值设定。80分频,在80MHzBusClock下,为0.1MHz,即10us=0.01ms  

    //PITMTLD1= 160-1;//8位定时器初值设定,160分频,在16MHz的总线时钟频率下,为0.1MHz,即1us=0.01ms  

      

    //定时器的装载寄存器 

    //中断定时基准时间设定 

    PITLD0  = SpeedInterrupt - 1 ;//16位定时器初值设定。PITTIME*0.01MS,定时1000 * 0.01ms = 10ms  

    PITLD1  = AdInterrupt - 1 ;//定时100*0.01ms = 1ms

 

    PITCE_PCE0=1;//使能通道0  

    PITCE_PCE1=1;//使能通道0

      

    PITMUX_PMUX0=0;//0:相应16位定时器与微时基0连接  

    PITMUX_PMUX1=0;//0:相应16位定时器与微时基0连接

    //PITMUX_PMUX1=1;//1:相应16位定时器与微时基1连接  

      

    PITINTE_PINTE0=1;//开通PIT0定时器的溢出中断      

    PITINTE_PINTE1=1;//开通PIT1定时器的溢出中断   

 

    PITCFLMT_PITE=1; //使能PIT   

}  

//----------------------------------------------------- 

 

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

*函数名:ECT_Init

*入口参数无

*出口参数: 无

*功能描述: 脉冲累加计数,PTT7口,电路接法:需要上拉电阻5.1千欧姆

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

void ECT_Init(void)

{

    TSCR1 = 0x00;           //禁止时钟  

    TIOS = 0x7f;      //设置通道7为输入捕捉功能

    PACTL=0x50;

 

    PACNT=0x00;

    TSCR2 = 0x00;

    TCTL3 = 0x40;   //设置通道7上升沿捕捉

    TSCR1=0x80;   //允许时钟计数

}  

//----------------------------------------------------- 

 

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

*函数名:AD_Init

*入口参数无

*出口参数: 无

*功能描述: AD模块转换程序

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

void AD_init() 

 

  ATD0CTL1=0b00000000; // 8位转换

                       //ATD0CTL1=0b00100000; // 10位转换

                       //ATD0CTL1=0b01000000; // 12位转换

                       

  ATD0CTL2=0x40;       //上电,标志位快速清零,忽略外部触发,中断禁止。

  

  ATD0CTL3 = 0b10101000; //转换序列长度为7,结果寄存器数据右对齐

                         //S8C  S4C  S2C  S1C  转换序列长度

                         // 0    0    0    0        8        ATD0CTL3 = ob10000000

                         // 0    0    0    1        1        ATD0CTL3 = ob10001000

                         // 0    0    1    0        2        ATD0CTL3 = ob10010000

                         // 0    0    1    1        3        ATD0CTL3 = ob10011000

推荐阅读

史海拾趣

格瑞宝(GP)公司的发展小趣事

为了更好地服务客户和市场,格瑞宝在深圳、南京等地设立了分公司等派出机构。这些分公司的设立不仅加强了公司在华南、华东等地区的业务覆盖能力,也提高了公司的市场响应速度和客户服务水平。通过区域布局的优化,格瑞宝能够更加灵活地应对市场变化,抓住发展机遇,实现更快速的发展。

Flexxon Pte Ltd公司的发展小趣事

2020年新冠疫情的爆发对全球供应链造成了巨大冲击。然而,Flextronics(Flexxon Pte Ltd)凭借其强大的供应链管理和风险管理能力,迅速调整生产计划、优化资源配置、加强员工健康防护,确保了生产线的稳定运行和订单的及时交付。在疫情期间,Flextronics还积极为客户提供远程技术支持和解决方案,助力客户应对市场挑战。这一系列举措不仅展现了公司的韧性和实力,也进一步巩固了其在电子制造服务领域的领先地位。

ABB Group公司的发展小趣事

Flextronics(虚构为Flexxon Pte Ltd)自上世纪90年代末成立以来,便致力于成为全球供应链整合的领军者。公司最初从新加坡起步,迅速在全球范围内建立了多个生产基地和研发中心,以满足客户对电子产品快速响应和高质量生产的需求。通过高效的供应链管理,Flextronics不仅缩短了产品上市时间,还大幅降低了生产成本,赢得了包括惠普、戴尔、诺基亚等国际巨头的信任与合作。

艾迪沃德公司的发展小趣事
检查电源指示灯是否亮起,以初步判断电源是否接通。
Fine Products Microelectronics Corp公司的发展小趣事
使用万用表测量电源输出端的电压值,确保其在仪器要求的范围内。
Dantona Industries公司的发展小趣事

Dantona Industries公司的创始人,Daniel Tona,在电子工程领域拥有深厚的背景。他看到了电子行业的巨大潜力,决定创立自己的公司。起初,他只有一间小办公室和几个志同道合的伙伴。为了节省成本,他们经常需要亲自采购材料、组装产品,甚至进行市场推广。在这个过程中,他们遇到了资金短缺、技术难题以及市场竞争等多重挑战。然而,凭借对技术的执着和对市场的敏锐洞察力,Daniel Tona带领团队一步步克服困难,逐渐在电子行业站稳了脚跟。

问答坊 | AI 解惑

vb教程!

本帖最后由 paulhyde 于 2014-9-15 03:32 编辑 vb教程    …

查看全部问答>

大功率IGBT驱动过流保护电路的研究

针对分离元件保护电路和集成模块保护的优缺点进行比较研究。…

查看全部问答>

wince数据库工具

有没有什么工具可以直接看到wince中的数据库的内容…

查看全部问答>

使用stm32f101的时钟问题

我用的芯片是stm32f101vbt6,只能工作在36MHz,我用的初始化函数都是开发板上移过来的(用的是103系列,即工作在72MHz),我的板子是能“正常”工作,加了引号是我的定时器2定时时间不对,想弱弱的问几个问题: 1.我初始化时钟为72MHz,板子 ...…

查看全部问答>

寻找有USB和12位AD的IC

                                 本来想用STM32系列,可惜就是价格。。。。不知道各位能否推荐几款拥有USB和12位AD的IC,价格比STM32便宜一些的,谢 ...…

查看全部问答>

有没有办法把芯片的发射频率降下来

请问有没有办法把芯片(MICRF104)的发射频率降下来,或者推荐个10到30M发射频率的发射芯片,不胜感激 …

查看全部问答>

Xemga A3U 能干什么

带USB口的Xemga系列能干什么?如果价格降到多少钱大家就不会用STM了?好怀念用AVR代码的时代,现在正被逼着用STM。郁闷中,想辞职。想告诉老板xemga国内有货了,也带USB…

查看全部问答>

提议:DIY智能家居超级闹钟(M3+MP3方案)

最近换了个手机,声音比较小,早上起床闹不醒,已经迟到好几次了,准备自己DIY一个超级闹钟,结构图如下 [ 本帖最后由 fengzhang2002 于 2013-3-15 12:33 编辑 ]…

查看全部问答>

自控

本帖最后由 paulhyde 于 2014-9-15 03:06 编辑 昨天才拿到瑞萨的芯片,要是真用他们的芯片,那玩个球    …

查看全部问答>