共2条
1/1 1 跳转至页
SPI 大家看看这个SPI程序为什么不能收

问
void AT91F_SPI_Cfg_spi(void)
{
//* Reset the SPI
AT91F_SPI_Reset(AT91C_BASE_SPI);
//* Configure SPI in Master Mode with No CS selected !!!
AT91F_SPI_CfgMode(AT91C_BASE_SPI, AT91C_SPI_MSTR | AT91C_SPI_MODFDIS | AT91C_SPI_FDIV);
//* Configure SPI CS0 for Serial DataFlash AT45DBxx
AT91F_SPI_CfgCs(AT91C_BASE_SPI,0,spi_mode1);
//* Configure SPI CS3 for DataFlash Card AT45DCBxx
//AT91F_SPI_CfgCs(3, AT91C_SPI_CPOL | (AT91C_SPI_DLYBS & 0x100000) | ((MASTER_CLOCK / (2*DATAFLASH_CLK)) << 8));
//* Enable the SPI
AT91F_SPI_Enable(AT91C_BASE_SPI);
}
////////read spi to confirm if the data oxf5 witen in fm25l256
void read_spi(void)
{
unsigned int readint;
AT91F_SPI_Cfg_spi();
AT91C_BASE_SPI->SPI_TDR = 0x000E0003;
AT91C_BASE_SPI->SPI_TDR = 0x000E0000;
AT91C_BASE_SPI->SPI_TDR = 0x000E0000;
readint=AT91C_BASE_SPI->SPI_RDR;
readint=AT91C_BASE_SPI->SPI_RDR;
readint=AT91C_BASE_SPI->SPI_RDR;
if(readint&0xff<5){
AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED4 );
delay();
delay();
delay();
delay();
delay();
delay();
AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED4 );
}
}
void WRITE_SPI(void)
{
AT91C_BASE_SPI->SPI_TDR = 0X000EFFFF&SPI_D6;
AT91C_BASE_SPI->SPI_TDR = ((unsigned int) 0x000E0002);
AT91C_BASE_SPI->SPI_TDR = (unsigned int)0x000E0000;
AT91C_BASE_SPI->SPI_TDR = (unsigned int)0x000E0000;
AT91C_BASE_SPI->SPI_TDR = (unsigned int)0x000E0002;
AT91C_BASE_SPI->SPI_TDR = (unsigned int)0x000E0003;
AT91C_BASE_SPI->SPI_TDR = (unsigned int)0x010E0004;
//write oxf5 in the address of 0x0;
read_spi();
}
void spi_init(void)
{
AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA, AT91C_PIO_PA11|AT91C_PIO_PA12|AT91C_PIO_PA13|AT91C_PIO_PA14, 0);
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, (unsigned int) 1<<AT91C_ID_SPI );
AT91F_SPI_Cfg_spi();
//AT91PS_SPI SPI_PT;
//SPI_PT = AT91C_BASE_SPI;
//AT91C_SPI_MR = AT91C_SPI_MSTR|AT91C_SPI_FDIV|AT91C_SPI_MODFDIS;
//AT91F_SPI_CfgMode(AT91C_BASE_SPI,AT91C_SPI_MSTR|AT91C_SPI_FDIV|AT91C_SPI_MODFDIS);
//AT91C_BASE_SPI->SPI_IDR = (unsigned int)0X000003FF;
//AT91C_BASE_SPI->SPI_CSR[0] = (unsigned int) 0X0307FF00;
//OPEN SPI
//AT91C_BASE_SPI->SPI_CR=AT91C_SPI_SPIEN;
WRITE_SPI( );
}
用的时at91sam7s64,在AXD下调试,调试的时候发现通过示波器可以看到输出的波形,但是在读取的时候MISO引脚上没有反应,此时PCS和SPCK引脚也没有波形, 有做过的高手指点一下,究竟是什么问题。不胜感激!!!!!!!!!!!!!!!! 答 1: 请教高手 答 2: 帮你顶rt
{
//* Reset the SPI
AT91F_SPI_Reset(AT91C_BASE_SPI);
//* Configure SPI in Master Mode with No CS selected !!!
AT91F_SPI_CfgMode(AT91C_BASE_SPI, AT91C_SPI_MSTR | AT91C_SPI_MODFDIS | AT91C_SPI_FDIV);
//* Configure SPI CS0 for Serial DataFlash AT45DBxx
AT91F_SPI_CfgCs(AT91C_BASE_SPI,0,spi_mode1);
//* Configure SPI CS3 for DataFlash Card AT45DCBxx
//AT91F_SPI_CfgCs(3, AT91C_SPI_CPOL | (AT91C_SPI_DLYBS & 0x100000) | ((MASTER_CLOCK / (2*DATAFLASH_CLK)) << 8));
//* Enable the SPI
AT91F_SPI_Enable(AT91C_BASE_SPI);
}
////////read spi to confirm if the data oxf5 witen in fm25l256
void read_spi(void)
{
unsigned int readint;
AT91F_SPI_Cfg_spi();
AT91C_BASE_SPI->SPI_TDR = 0x000E0003;
AT91C_BASE_SPI->SPI_TDR = 0x000E0000;
AT91C_BASE_SPI->SPI_TDR = 0x000E0000;
readint=AT91C_BASE_SPI->SPI_RDR;
readint=AT91C_BASE_SPI->SPI_RDR;
readint=AT91C_BASE_SPI->SPI_RDR;
if(readint&0xff<5){
AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED4 );
delay();
delay();
delay();
delay();
delay();
delay();
AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED4 );
}
}
void WRITE_SPI(void)
{
AT91C_BASE_SPI->SPI_TDR = 0X000EFFFF&SPI_D6;
AT91C_BASE_SPI->SPI_TDR = ((unsigned int) 0x000E0002);
AT91C_BASE_SPI->SPI_TDR = (unsigned int)0x000E0000;
AT91C_BASE_SPI->SPI_TDR = (unsigned int)0x000E0000;
AT91C_BASE_SPI->SPI_TDR = (unsigned int)0x000E0002;
AT91C_BASE_SPI->SPI_TDR = (unsigned int)0x000E0003;
AT91C_BASE_SPI->SPI_TDR = (unsigned int)0x010E0004;
//write oxf5 in the address of 0x0;
read_spi();
}
void spi_init(void)
{
AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA, AT91C_PIO_PA11|AT91C_PIO_PA12|AT91C_PIO_PA13|AT91C_PIO_PA14, 0);
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, (unsigned int) 1<<AT91C_ID_SPI );
AT91F_SPI_Cfg_spi();
//AT91PS_SPI SPI_PT;
//SPI_PT = AT91C_BASE_SPI;
//AT91C_SPI_MR = AT91C_SPI_MSTR|AT91C_SPI_FDIV|AT91C_SPI_MODFDIS;
//AT91F_SPI_CfgMode(AT91C_BASE_SPI,AT91C_SPI_MSTR|AT91C_SPI_FDIV|AT91C_SPI_MODFDIS);
//AT91C_BASE_SPI->SPI_IDR = (unsigned int)0X000003FF;
//AT91C_BASE_SPI->SPI_CSR[0] = (unsigned int) 0X0307FF00;
//OPEN SPI
//AT91C_BASE_SPI->SPI_CR=AT91C_SPI_SPIEN;
WRITE_SPI( );
}
用的时at91sam7s64,在AXD下调试,调试的时候发现通过示波器可以看到输出的波形,但是在读取的时候MISO引脚上没有反应,此时PCS和SPCK引脚也没有波形, 有做过的高手指点一下,究竟是什么问题。不胜感激!!!!!!!!!!!!!!!! 答 1: 请教高手 答 2: 帮你顶rt
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
分享汽车通信和多媒体总线结构被打赏20分 | |
【我踩过的那些坑】结构堵孔导致的喇叭无声问题被打赏50分 | |
NUCLEO-U083RC学习历程38+串口通过队列的方式输出两个字符串被打赏20分 | |
【我踩过的那些坑】分享一下调试一款AD芯片的遇到的“坑”被打赏50分 | |
电流检测模块MAX4080S被打赏10分 | |
【我踩过的那些坑】calloc和malloc错误使用导致跑飞问题排查被打赏50分 | |
分享电控悬架的结构与工作原理(一)被打赏20分 | |
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 |