#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
}
上一篇:LPC1768里的SPI驱动示例——基于SST25VF016B
下一篇:LPC2124--GPIO按键控制LED灯的闪烁
推荐帖子
- 各位大佬,这错误说我这管脚没编号,我这旁边写的数字难道不算编号吗?要怎么解决呀?
- 各位大佬,这错误说我这管脚没编号,我这旁边写的数字难道不算编号吗?要怎么解决呀?元件编号为什么是U?-1,没有重复的吗要进入元件库文件进行编辑修改的元件引脚,序号,名字等你这是要生成PCB吗?检查下1.看看你这个元件的封装,是不是跟管脚已经一一对应了。2.封装文件路径对不对,设置的路径是否设置好了设置对了没,你需要的封装是不是在设置的这个路径下这个应该是重复的东西没有检测到或者你修改编号先看看器件画的
- 试图成为理工男的文科生 PCB设计
- STM8单片机重启
- 求助各位,现在设计一个驱动器,原理如下:驱动器上有主控芯片STM8S105K4,继电器,蜂鸣器及电源电路。工作时驱动器接收命令,打开或者关闭继电器,继电器后边连接的是窗帘电机,而蜂鸣器是在驱动器刚上电时长响一声。现在问题是操作驱动器让继电器连续打开或关闭,操作5~6次后,蜂鸣器就会长响一声。应该是单片机重启,各位有没有遇到过这种问题?分析一下原因!STM8单片机重启排除电路问题的前提下控制部分加光耦隔离看一下电源的纹波,有可能是继电器开断造成的电源电压低,然后单片机就重启了。这种问题还是先
- 夜半钟声 stm32/stm8
- 我做了一件"地球人都不相信的事"
- 大家看看,这是笔者的设计太阳能光伏电池的实际视频,http://v.youku.com/v_show/id_XMTg5MTkwNzAw.html大家看后有什么想法,可以直接与我联系QQ708970269http://v.youku.com/v_show/id_XMTg5MTkwNzAw.html视频观看我做了一件地球人都不相信的事没耳机,太阳能光伏电池能效高,使用时间长应该很不错:)但不知道“把太阳能板多串几块,把电压提上去试试!”这是什么呢?这不是
- czl618 电源技术
- 新手求教,io口操作
- 我刚入门,对c和wince都不熟,想在wince5.0下编一个控制IO口灯循环闪烁的程序,各位大侠能否赐教?我的平台是ep9315开发板,GPIO的地址是0x8084_00xx。我只知道:先编写一个dll文件能访问IO口,然后在应用程序中调用dll文件来实现。三星2440上的程序或linux下的程序有多大的参考价值?请大家给些个意见。新手求教,io口操作参考别的BSP的GPIO写个驱动就可以了1。如果是fullkernel模式的话,直接应用程序中像单片机一样操作0x8084
- snowie 嵌入式系统
- 机智云物联网平台+MSP430G2553+低功耗锂电池智能管理器
- 摘要:为了保证电动汽车锂电池作为动力源的安全稳定运行,锂电池的运行状态监测和智能控制是不可少的。该设计以MSP430G2553单片机为电池智能管理系统的控制中心,电压/电流/温度采集电路、保护电路、显示电路等模块为辅助设计电路,并通过WiFi传输技术,实现手机APP/电脑终端设备进行远程实时监测,采用低功耗芯片、间歇式工作方式、数字滤波技术等多种方法降低系统功耗,实现低功耗锂电池安全运行的智能管理功能。0引言由于锂电池自放电率低,体积小,能量比高等优点,越来越受到人们的青睐,尤其近
- 毛球大大 RF/无线
- 【Follow me第二季第2期】任务汇总
- 本次活动已经接近尾声了,我们一起通过学习实现了物联网的基本流程,本次活动是DigiKey联合EEWorld发起的Followme活动第二季的第二期,精选高可玩性与教育价值的开发板及仪器套装,携手共赴实践盛宴。一、物料展示主控板卡:ArduinoUNOR4WiFiArduinoUNOR4WiFi是一款基于32位ArmCortex-M4RenesasRA4M1微控制器,具有用于Wi-Fi和蓝牙连接的ESP32模块,
- qzc飘曳 DigiKey得捷技术专区
设计资源 培训 开发板 精华推荐
- NSI45025AT1G 大电流 LED 灯串的典型应用
- MIKROE-3508,基于 4.3" 480x272 像素 TFT 显示器的 TFT 板 4 电容式显示板
- AKD7736B-A,AK7736B 2CH SRC 音频处理器评估板
- #第五届立创电子设计大赛#MODBUS数据监听仪
- LTC6261HDC 音频耳机桥式驱动器运算放大器的典型应用
- DM240001-2,用于 16 位 PIC24 MCU、dsPIC DSC 和 32 位 PIC32 MCU 的 Explorer 16/32 开发板
- 基于GD32的BLDC驱动
- LTC3335EUDC 锂亚硫酰氯一次电池供电应用的典型应用电路
- 加热台量产计划
- 桌面音箱改造蓝牙音箱