2440驱动MMA7455L源程序

发布者:技术掌门最新更新时间:2020-07-12 来源: 51hei关键字:驱动  MMA7455L 手机看文章 扫描二维码
随时随地手机看文章

单片机源程序如下:

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

文件名:Main.c

功能描述:主程序

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

#define        GLOBAL_CLK                1


#include

#include

#include "def.h"

#include "option.h"

#include "2440addr.h"

#include "2440lib.h"

#include "2440slib.h"

#include "Uart.h"

void SPI_Init(void);

void WriteByte_MMA7455L(U8 addr,U8 dat);

U8 ReadByte_MMA7455L(U8 addr);                                               

static U32 cpu_freq;       

static U32 UPLL;               

static void cal_cpu_bus_clk(void)

{

        U32 val;

        U8 m, p, s;       

        val = rMPLLCON;          //MPLLCON上电初始值为0x00096030

        m = (val>>12)&0xff;        //结果为0x96=150

        p = (val>>4)&0x3f;        //结果为0x03=3

        s = val&3;                          //结果为0

        //(m+8)*FIN*2 不要超出32位数!

        FCLK = ((m+8)*(FIN/100)*2)/((p+2)*(1<        val = rCLKDIVN;

        m = (val>>1)&3;

        p = val&1;       

        val = rCAMDIVN;

        s = val>>8;       

        switch (m) {

        case 0:

                HCLK = FCLK;

                break;

        case 1:

                HCLK = FCLK>>1;

                break;

        case 2:

                if(s&2)

                        HCLK = FCLK>>3;

                else

                        HCLK = FCLK>>2;

                break;

        case 3:

                if(s&1)

                        HCLK = FCLK/6;

                else

                        HCLK = FCLK/3;

                break;

        }       

        if(p)

                PCLK = HCLK>>1;

        else

                PCLK = HCLK;       

        if(s&0x10)

                cpu_freq = HCLK;

        else

                cpu_freq = FCLK;               

        val = rUPLLCON;

        m = (val>>12)&0xff;

        p = (val>>4)&0x3f;

        s = val&3;

        UPLL = ((m+8)*FIN)/((p+2)*(1<        UCLK = (rCLKDIVN&8)?(UPLL>>1):UPLL;

}


void Main(void)

{

        U8 key,sta;                       

        int i;                               

        U32 mpll_val = 0;

        i = 2 ;       

        switch ( i ) {

        case 0:        //200

                key = 12;

                mpll_val = (92<<12)|(4<<4)|(1);

                break;

        case 1:        //300

                key = 13;

                mpll_val = (67<<12)|(1<<4)|(1);

                break;

        case 2:        //400M

                key = 14;

                mpll_val = (92<<12)|(1<<4)|(1);

                break;

        case 3:        //440!!!

                key = 14;

                mpll_val = (102<<12)|(1<<4)|(1);

                break;

        default:

                key = 14;

                mpll_val = (92<<12)|(1<<4)|(1);

                break;

        }

        //rMPLLCON赋值0x5c011

        ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);

        ChangeClockDivider(key, 12); //key=14

        cal_cpu_bus_clk();

       

        Port_Init();        //IO端口初始化

        SPI_Init();//SPI初始化

        MMA7455L_INIT();//MMA7455L初始化

        Uart_Init();//串口初始化

        Uart_Select(0);

        Delay(5); //延时10ms让IIC和SPI准备就绪

        Uart_Printf("CLKCON=%x!",rCLKCON);

        Uart_Printf("开始发送数据!nn");       

        //对MMA7455L的0x16寄存器写配置数据0x05

        WriteByte_MMA7455L(0x16,0x05);

        //读回0x16寄存器的配置值,判断SPI通信是否成功.

        sta=ReadByte_MMA7455L(0x16);   

        Uart_Printf("sta=0x%x",sta);

        while(1)

        {


        }

}


void WriteByte_MMA7455L(U8 addr,U8 dat)

{

        int n;

        //片选CS置低,使能MMA7455为SPI模式

        rGPFDAT &= 0xef;   

        Delay(1);

       

        Uart_Printf("SPI状态寄存器的数据为0x%x!n",rSPSTA0);

        while(!(rSPSTA0&0x01==0x01)) ;

        //高位置1写操作

        rSPTDAT0 = 0x80|((addr & 0x3f)<<1);  

        Uart_Printf("SPI状态寄存器的数据为0x%x!n",rSPSTA0);

        Uart_Printf("写操作地址发送成功!n");       

        for(n=0;n<20;n++);       

        Uart_Printf("SPI状态寄存器的数据为0x%x!n",rSPSTA0);

        while(!(rSPSTA0&0x01==0x01)) ;

        rSPTDAT0 = dat;  //写数据

        Uart_Printf("SPI状态寄存器的数据为0x%x!n",rSPSTA0);

        Uart_Printf("写操作数据发送成功!n");       

        for(n=0;n<20;n++);       

        //片选CS置高电平,结束SPI通信

        rGPFDAT |= 0xff;  

        Delay(1);

}


U8 ReadByte_MMA7455L(U8 addr)

{

        int n;

        U8 Re_Dat;

        //片选CS置低电平,使能MMA7455L为SPI模式

        rGPFDAT &= 0xef;   

        Delay(1);       

        Uart_Printf("SPI状态寄存器的数据为0x%x!n",rSPSTA0);

        while(!(rSPSTA0&0x01==0x01)) ;

        //读操作高位清0

        rSPTDAT0 = (addr & 0x3f)<<1;   

        Uart_Printf("SPI状态寄存器的数据为0x%x!n",rSPSTA0);

        Uart_Printf("读操作地址发送成功!n");       

        for(n=0;n<20;n++);       

        Uart_Printf("SPI状态寄存器的数据为0x%x!n",rSPSTA0);

        while(!(rSPSTA0&0x01==0x01));

        Re_Dat = rSPRDAT0;

        Uart_Printf("SPI状态寄存器的数据为0x%x!n",rSPSTA0);       

        for(n=0;n<20;n++);

        //片选CS置高电平,结束SPI通信

        rGPFDAT |= 0xff;

        Delay(1);

         //返回读取数据

        return Re_Dat;

}

//MMA7455L初始化

void MMA7455L_INIT(void )

{

   MMA_QUEUE.MMA_HEAD=0;

   MMA_QUEUE.MMA_CUR=0;  

   SPI_WriteREG(0x16,0x05);//级别模式

   delay_nus(10);

[1] [2]
关键字:驱动  MMA7455L 引用地址:2440驱动MMA7455L源程序

上一篇:Proteus仿真ARM7 LPC2101 AD转换器源程序
下一篇:S3C2440微控制器外部中断实验

推荐阅读最新更新时间:2024-11-12 13:02

jz2440裸机开发与分析: 点亮LED灯之C语言1
存储过程分析 开辟一块内存用来存放寄存器地址,之后间接的修改寄存器内部的数值 c语言代码 按照常规先写主函数点亮LED灯 int main() { unsigned int *pGPFCON = (unsigned int *)0x56000050; unsigned int *pGPFDAT = (unsigned int *)0x56000054; /* 配置GPF4为输出引脚 */ *pGPFCON = 0x100; /* 设置GPF4输出0 */ *pGPFDAT = 0; return 0; } 之前有MDK写到这里就可以了,MDK的启动代码最主要的目的为CPU分配各种模式下
[单片机]
jz<font color='red'>2440</font>裸机开发与分析: 点亮LED灯之C语言1
基于μCLinux的USB驱动程序实现
  0 引 言   μClinux是针对嵌入式控制领域的操作系统,它继承了Linux内核的绝大部分特性,专为没有内存管理单元MMU的嵌入式微处理器而设计。它内核小,效率高,源代码开放,包含了完整的TCP/IP网络协议。ADSP-BF533是ADI公司Blackfin系列的高速数字信号处理器芯片。 Blackfin系列是ADI与Intel联合开发的体现高性能体系结构的首款第四代DSP产品,16位定点DSP内核,新型指令结构,支持C/C++编程,主频达600 MHz,内核电压1.2 V,具有动态电源管理能力,功耗低,扩展能力强,被广泛应用于各种信号处理。   这里使用基于Blackfin ADSP-BF533微处理器的μCli
[嵌入式]
关于基于STM32系列单片机的DMD投影仪的驱动电路的相关设计
DLP投影技术是应用美国德州仪器公司开发的数字微镜元件——DMD(Digital Micromirror Device)作为主要关键处理元件以实现数字光学处理过程的技术。DLP显示的色彩清晰度高、艳丽、细腻、逼真,且为全数字显示即可靠性极高,能在各类产品(如大屏幕数字电视、公司/家庭/专业会议投影机和数码相机(DLP Cinema))中提供最佳图像效果。目前,大部分的家用或商用DLP投影机都采用了单片结构,使得其便于移动携带,因而得到越来越广泛的应用。在目前应用发展的基础上,又对其结构的精简性、携带的方便性提出了更高的要求。传统的DLP投影仪是通过DVI接口接收外部信号,并且经过信号转换传送给DLP控制器来控制DLP的显示,占用的
[单片机]
关于基于STM32系列单片机的DMD投影仪的<font color='red'>驱动</font>电路的相关设计
如何创新与增长,英特尔用数据洪流驱动
宣布收购Mobileye,成立人工智能产品事业部,发布革命性的傲腾存储产品系列,最近一系列的大动作背后,英特尔有着怎样的深意和战略布局,究竟是什么在驱动英特尔的创新与增长? 从“人上网”到“物上网”,我们正迎来万物智能互联的新时代,由此而生的是数据量指数级爆炸,数据形态从结构化向非结构化不断演进,数据的处理方式也延伸至端到端。数据发生革命性变化,数据洪流汹涌而至,并催生前所未有的巨大机遇,我们必须把数据转化为切实可行的洞察,从而挖掘它的全部价值。 正如英特尔CEO科再奇所说,智能、互联的物和机器设备产生的海量数据,将成为英特尔创新和增长的驱动因素。面对万物智能互联、数据洪流、计算感知化和云的增值四大趋势以及由此迸发的新机遇
[物联网]
如何创新与增长,英特尔用数据洪流<font color='red'>驱动</font>
案例分享:兆易创新GD32 MCU 在电机驱动的应用
摘要:兆易创新GD32 MCU 在电机驱动应用上,经过多年技术沉淀,在无刷电机和步进电机的应用中,形成自身完整可靠的解决方案,愿能为用户提供更多的服务。 社会发展日新月异,我们的生活和工作越来越智能化,智能牙刷,扫地机器人,无人机等已经日常化使用,机械自动化也作为工业IOT的一个重要组成部分,其中我们可以看到电机的使用已经是一个共同的焦点应用。 作为工程师的我们,总是在我们的产品上进行深度思考,如何实现社会用户的使用需求。 需要什么类型电机 电机的功率,电压,电流参数要求 电机的速度,位置,转矩,精度 电机驱动算法 ZLG具有一支资深的专业电机控制算法解决团队,为您做了如下分类,您可根据切身应用作以对比
[工业控制]
案例分享:兆易创新GD32 MCU 在电机<font color='red'>驱动</font>的应用
兆芯傅城:国产CPU发展需要自主可控与兼容主流双轮驱动
  2018年1月19日,中国计算机学会青年计算机科技论坛(CCF YOCSEF)20周年系列活动在北京成功举办。活动期间,来自 CPU 领军企业代表围绕国产 CPU 的最新进展和发展问题进行了积极的讨论。上海 兆芯 集成电路有限公司副总裁傅城博士、总工程师王惟林受邀出席了此次活动,分别在“国产 CPU 应该如何自主发展”论坛及“国产CPU的最新进展”报告会上进行了致辞演讲,得到了与会听众的广泛关注。下面就随嵌入式小编一起来了解一下相关内容吧。   “国产CPU应该如何自主发展”论坛期间, 兆芯 副总裁傅城博士在致辞中表示,谋求国产CPU自主发展,需要自主可控与兼容主流双轮驱动。他指出,在一系列政策、基金等支持下,国家集成电路产
[嵌入式]
S3C2440的Keil启动文件S3C2440.s添加中断配置
前言 本文主要描述如何在Keil自带的S3C2440.s文件中添加中断配置及中断地址映射,从而可以在中断产生时跳转到用户代码中的中断服务函数。目前在TQ2440开发板是实测可用。 工程源代码下载 本文所有代码都是截取代码,“…”代表其还有上下文。可根据代码中上下文的残缺部分找到该代码添加的位置。 一,添加中断相关寄存器地址符号映射 因为原始S3C2440.s文件中不含中断相关寄存器的地址,所以需要在开头添加: ... ; * RAM_INTVEC: when set the startup code copies exception vectors ; * from execution address to
[单片机]
Linux驱动——LED闪烁
  连接开发板和PC,然后打开S3C开发板的电源开关,成功启动后,执行build.sh脚本文件编译和安装LED驱动。build脚本文件会自动将驱动的.ko文件上传到S3C开发板并安装。   LED驱动会建立一个/dev/s3c5410_leds设备文件,该Linux驱动可以控制4个LED。通过向/dev/s3c6410_leds发送长度为1到4的字符串可以控制这4个LED的开关。也可以执行test_leds.sh脚本文件测试LED。   创建LED驱动的设备文件:1、使用cdev_init函数初始化cdev;2、指定设备号:Linux设备文件的设备号分为主设备号和次设备号,用1个int类型表示,其中前12为表示主设备号,后20位表
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved