zoukankan      html  css  js  c++  java
  • LPC1788的spi使用

    #ifndef __SPI_H_

    #define __SPI_H_

     

    #include "common.h"

    #include "delay.h"

     

    // cs p1.21

    //sck p1.20

    //miso p1.23

    //mosi p1.24

     

    #define SPI_CLOCK   12000000

     

    void spi0_select_cs(void);

     

    void spi0_disSelect_cs(void);

     

    u8 spi0_rw_data(u8 writeByte);

     

    void spi0_set_speed(u8 speed);

     

    void spi0_init(u8 divide);

     

     

     

    #endif

     

     

     

     

     

     

     

     

    #include "spi.h"

     

     

    void spi0_select_cs(void)

    {

        P1low(21) = 1;

    }

     

    void spi0_disSelect_cs(void)

    {

        P1high(21) = 1;

    }

     

    u8 spi0_rw_data(u8 writeByte)

    {

        u8 retry = 200;

        u8 readByte;

        while(!(LPC_SSP0->SR&0x01))//等待发送完成

        {

            retry--;

            DelayUs(1);

            if(retry == 0)return 1;

        }

        LPC_SSP0->DR = (u16)writeByte;

        retry = 200;

        while(!(LPC_SSP0->SR&0x04))

        {

            retry--;

            DelayUs(1);

            if(retry == 0)return 1;

        }

        readByte = (u8)LPC_SSP0->DR;

       

        return readByte; 

    }

     

    void spi0_set_speed(u8 divide)

    {

        LPC_SSP0->CR1 &= ~(1<<1);//停止spi

        LPC_SSP0->CR0 |= ((SPI_CLOCK/(divide-1))<<8);

        LPC_SSP0->CR1 |= (1<<1);//启动spi

    }

     

    void spi0_init(u8 divide)

    {

        //打开SPI时钟和io口时钟

        LPC_SC->PCONP |= (1<<15)|(1<<21);//打开时钟

        //配置cs

        LPC_IOCON->P1_21 = 0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽

        LPC_IOCON->P1_21 |= (2<<3);//上拉

        P1dir(21) = 1;//输出

        P1high(1) = 1;//为高

       

        LPC_IOCON->P1_20 = 0x00;//选择禁止迟滞 不反向 正常推挽

        LPC_IOCON->P1_20 |= (2<<3)|(5<<0);//上拉 ssp clk

       

        LPC_IOCON->P1_23 = 0x00;//选择禁止迟滞 不反向 正常推挽

        LPC_IOCON->P1_23 |= (2<<3)|(5<<0);//上拉 ssp miso

       

        LPC_IOCON->P1_24 = 0x00;//选择禁止迟滞 不反向 正常推挽

        LPC_IOCON->P1_24 |= (2<<3)|(5<<0);//上拉 ssp mosi

       

         //spi接口初始化

        LPC_SSP0->CR0 = 0x0000;

        LPC_SSP0->CR1  = 0x00000000;//正常操作,主机模式

        LPC_SSP0->CR0 |= (7<<0)|(1<<6)|(1<<7)|((SPI_CLOCK/(divide-1))<<8);//8位数据 cpol cpoa

        LPC_SSP0->CPSR = ApbClock/SPI_CLOCK;

        LPC_SSP0->IMSC = 0x00000000;//禁止中断

       

        LPC_SSP0->CR1 |= (1<<1);//启动spi

    }

     

     

     

     

  • 相关阅读:
    for 循环遍历字典中的键值两种方法
    python print函数之end
    python中的lambda匿名函数和reduce、filter、map函数
    python2.7 python3.3 cmd命令行 运行同一段代码内存地址为什么不一样?而用同一个解释器运行的内存地址都一样
    Eclipse快捷键
    Sass基础(二)
    Sass基础(一)
    浅谈JavaScript原型
    浅谈Javascript闭包
    Bootstrap学习笔记(四)
  • 原文地址:https://www.cnblogs.com/dengxiaojun/p/4338715.html
Copyright © 2011-2022 走看看