LPC1114, ZLG的那个板, 用的是
P0.3 - CS
P0.6 - SCK
P0.8 - MISO
P0.9 - MOSI
用的是TKstudio
SSP那部分驱动过595, 没问题, 但不能驱动SD卡, SD驱动部分是ZLG的SD卡驱动, 在其基础上更改的
代码如下:
void SSP_Init (void)
{
int i;
PRESETCTRL &= (0x1<<0);
for(i=0; i<100; i++);
PRESETCTRL |= 0x01; /* 禁止SPI0复位 */
IOCON_SCKLOC = 0x02; /* P0.6配置为SCK */
SYSAHBCLKCTRL |= (1ul << 11); /* 打开SPI0外设 */
SSP0CLKDIV = 0x01; /* SSP时钟分频 */
SSP0CR0 = (0x07 << 8) | /* SCR 设置SPI时钟分频 */
(0x00 << 7) | /* CPHA 时钟输出相位, */
/* 仅SPI模式有效 */
(0x01 << 6) | /* CPOL 时钟输出极性, */
/* 仅SPI模式有效 */
(0x00 << 4) | /* FRF 帧格式 00=SPI,01=SSI, */
/* 10=Microwire,11=保留 */
(0x07 << 0); /* DSS 数据长度,0000-0010=保留*/
/* 0011=4位,0111=8位,1111=16位 */
SSP0CR1 = (0x00 << 3) | /* SOD 从机输出禁能,1=禁止 */
(0x00 << 2) | /* MS 主从选择,0=主机,1=从机 */
(0x01 << 1) | /* SSE SSP使能 */
(0x00 << 0); /* LBM 回写模式 */
SSP0CPSR = 2; /* PCLK分频值 */
SSP0ICR = 0x03; /* 中断清除寄存器 */
}
此帖出自
小平头技术问答
/*******************************************************************************************************************
** 函数名称: void SPI_SendByte() Name: void SPI_SendByte()
** 功能描述: 通过SPI接口发送一个字节 Function: send a byte by SPI interface
** 输 入: INT8U byte: 发送的字节 Input: INT8U byte: the byte that will be send
** 输 出: 无 Output: NULL
********************************************************************************************************************/
void SPI_SendByte(INT8U byte)
{
INT8U temp;
SSP0DR = byte;
while ((SSP0SR & 0x01) == 0) { /* 等待TFE置位,即发送FIFO空 */
}
temp=SSP0DR;
}
/*******************************************************************************************************************
** 函数名称: INT8U SPI_RecByte() Name: INT8U SPI_RecByte()
** 功能描述: 从SPI接口接收一个字节 Function: receive a byte from SPI interface
** 输 入: 无 Input: NULL
** 输 出: 收到的字节 Output: the byte that be received
********************************************************************************************************************/
INT8U SPI_RecByte(void)
{
INT8U temp;
SSP0DR = 0xff;
while ((SSP0SR & 0x01) == 0) { /* 等待TFE置位,即发送FIFO空 */
}
temp=SSP0DR;
return temp;
}
INT8U SPI_SendRecByte(INT8U byte)
{
INT8U temp;
SSP0DR = byte;
while ((SSP0SR & 0x01) == 0) { /* 等待TFE置位,即发送FIFO空 */
}
temp=SSP0DR;
return temp;
}
用示波器观察, MISO上没有正确的低电平, 电压总是下降到1/3的位置后又抬高了.
CS, SCK, MOSI的波形都没问题
这是怎么回事啊
谢谢先啊!!
一周热门 更多>