打印
[微控制器/MCU]

请大神帮忙看看LPC1114 SPI0配置,芯片无输出信号

[复制链接]
1059|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
青空之狼|  楼主 | 2016-5-27 11:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void SPI0_Init(void)
{
        uint8_t i,Clear=Clear;//Clear=Clear:用这种语句形式解决编译产生的Waring:never used!       

        LPC_SYSCON->PRESETCTRL |= (0x1<<0);           //禁止LPC_SSP0复位
        LPC_SYSCON->SYSAHBCLKCTRL |= (0x1<<11);//允许LPC_SSP0时钟 bit11
        LPC_SYSCON->SSP0CLKDIV = 0x01;                   //分频系数为1,使SPI0速率最大:48Mhz
        LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16); // 使能IOCON时钟(bit16)
        LPC_IOCON->SCK_LOC = 0x02;      //把SCK0复用到PIO0_6引脚
        LPC_IOCON->PIO0_6 &= ~0x07;
        LPC_IOCON->PIO0_6 |= 0x02;                //把PIO0_6设置为SSP CLK
        LPC_IOCON->PIO0_8 &= ~0x07;       
        LPC_IOCON->PIO0_8 |= 0x01;                //把PIO0_8设置为SSP MISO
        LPC_IOCON->PIO0_9 &= ~0x07;       
        LPC_IOCON->PIO0_9 |= 0x01;                //把PIO0_9设置为SSP MOSI
        LPC_SYSCON->SYSAHBCLKCTRL &= ~(1<<16); // 禁能IOCON时钟(bit16)
        // 8位数据传输,SPI模式, CPOL = 0, CPHA = 0,空闲时CLK为0,第一个上升沿采集数据,SCR = 0
        LPC_SSP0->CR0 = 0x0007;            
        // 预分频值(注意:必须为偶数 2~254)
        LPC_SSP0->CPSR = 0x02;
        LPC_SSP0->CR1 &= ~(1<<0);//LBM=0:正常模式
        LPC_SSP0->CR1 &= ~(1<<2);//MS=0:主机模式
        LPC_SSP0->CR1 |=  (1<<1);//SSE=1:使能SPI0
        //清空RxFIFO,LPC1114收发均有8帧FIFO,每帧可放置4~16位数据
        for ( i = 0; i < 8; i++ )
        {
                  Clear = LPC_SSP0->DR;//读数据寄存器DR将清空RxFIFO
        }                                    
}

/*****************************************/
/* 函数功能:SPI0通信                    */
/* 说明:    发送一个字节,接收一个字节  */
/*****************************************/
uint8_t SPI0_communication(uint8_t TxData)
{               
        while((LPC_SSP0->SR)&(1<<4));//忙时等待,SR状态寄存器bit4 BSY:忙时为1
        LPC_SSP0->DR = TxData;                 //把要发送的数写入TxFIFO
        while(!((LPC_SSP0->SR)&(1<<2)));//等待接收完,SR状态寄存器bit2 RNE:接收FIFO非空为1
        return(LPC_SSP0->DR);                               //返回收到的数据
}

#include "LPC11xx.h"
#include "ssp.h"
#include "systick.h"
#define LED_ON  LPC_GPIO0->DATA |= (1<<7)
#define LED_OFF LPC_GPIO0->DATA &= ~(1<<7)
/***************************************/
/*函数名称:延时函数*
* ************************************/
void delay(){
        uint16_t i,j;
        for(i=0;i<5000;i++)
                for(j=0;j<200;j++); }
/**************************************/
//函数名称:LED灯初始化
/**************************************/
void led_init(){
  LPC_GPIO0->DIR |= (1<<7);//把P0.7设置为输出引脚
  LPC_GPIO0->DATA &=~(1<<7);//把P0.7设置为低电平
}
int main(void) {
        SysTick_Config(SystemCoreClock/1000); // 间隔1ms进入SYSTICK中断
        SSP0_Init();
    led_init();
    while(1) {
            LED_ON;
            delay();
            LED_OFF;
            delay();
            SPI0_communication(0x88);
    }
    return 0 ;
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

20

帖子

1

粉丝