新唐M0读写W25Q16存储器的程序.pdf
文本预览下载声明
D:\LYN_工程\NUC1xx\PRJ\Nmj_0814\Soc\W25Q16.c
#include Slave.h
//*****************************************************************************
//功能:初始化外设SPI0.
//*****************************************************************************
void SPI0_start (void)
{
/* GPIO为SPI0所用 */
DrvGPIO_InitFunctio ( E_FUNC_SPI0);
/* SPI0为主模式, 传输类型=1, 32位传输 */
DrvSPI_Ope ( eDRVSPI_PORT0, eDRVSPI_MASTER, eDRVSPI_TYPE1, 8);
/* MSB优先 */
DrvSPI_SetEndia ( eDRVSPI_PORT0, eDRVSPI_MSB_FIRST);
/* 禁止自动从选择 */
DrvSPI_DisableAutoSS ( eDRVSPI_PORT0);
/* 从选择引 低电平激活 */
DrvSPI_SetSlaveSelectActiveLevel ( eDRVSPI_PORT0, eDRVSPI_ACTIVE_LOW_FALLING);
/* 禁止2比特传输模式 */
DrvSPI_Set2BitTransferMode ( eDRVSPI_PORT0, FALSE);
/* SPI0的时钟频率为:1MHz */
DrvSPI_SetClockFreq ( eDRVSPI_PORT0,6000000,0);
}
//*****************************************************************************
//功能:核对制造商编号: 0xEF;器件编号:ID: 0x14.
//输入:
//输出:
//*****************************************************************************
void W25Q16_RMidDid (void)
{
uint32_t x [1];
/* 发送位宽为:8 bits */
DrvSPI_SetBitLength ( eDRVSPI_PORT0, 8);
/* 设置从选择引 :SS0 */
DrvSPI_SetSS ( eDRVSPI_PORT0, eDRVSPI_SS0);
/* 发指令: 0x90, 读取MID/DID. */
x [0] = 0x90;
DrvSPI_SingleWrite ( eDRVSPI_PORT0, x);
/* 等待空闲 */
while ( DrvSPI_IsBusy( eDRVSPI_PORT0));
/* 发送位宽为:24 bits */
DrvSPI_SetBitLength ( eDRVSPI_PORT0, 24);
/* 发送:24字节0 */
x [0] = 0x0;
DrvSPI_SingleWrite ( eDRVSPI_PORT0, x);
/* 等待空闲 */
while ( DrvSPI_IsBusy( eDRVSPI_PORT0));
/* 发送位宽为:16 bits */
DrvSPI_SetBitLength ( eDRVSPI_PORT0, 16);
/* 接收 */
x [0] = 0x0;
DrvSPI_SingleWrite ( eDRVSPI_PORT0, x);
/* 等待空闲 */
while ( DrvSPI_IsBusy( eDRVSPI_PORT0));
/* 禁止从选择引 :SS0 */
DrvSPI_ClrSS ( eDRVSPI_PORT0, eDRVSPI_SS0);
/* 从:Rx寄存器读回数据 */
DrvSPI_DumpRxRegister ( eDRVSPI_PORT0, x, 1);
/* 核对:MID and DID *
显示全部