共2条
1/1 1 跳转至页
SSP 求助: SSP读写数据问题
问
以下是按zlg光盘编写的.
我将CPHA,CPOL和SCR,CPSR的所有组合及速率都试了,都不行.
是我以下的程序(硬件SSP)不对吗???
谢谢!!!!!!
管脚配置:
POWER->P_CONP |= (1 << PCSPI1);
PINSEL->PIN_SEL1 |= ((P0_17_SCK1 << P0_17_PINSEL) | (P0_18_MISO1 << P0_18_PINSEL) | (P0_19_MOSI1 << P0_19_PINSEL));
SSP->SSP_CR0 = (0x01 << 8) | // SCR 设置SPI时钟分频0x01
(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位
SSP->SSP_CR1 = (0x00 << 3) | // SOD 从机输出禁能,1=禁止,0=允许
(0x00 << 2) | // MS 主从选择,0=主机,1=从机
(0x01 << 1) | // SSE SSP使能,1=允许SSP与其它设备通信
(0x00 << 0); // LBM 回写模式
SSP->SSP_CPSR = 0x52; // PCLK分频值
// SSP->SSP_IMSC = 0x07; // 中断屏蔽寄存器
SSP->SSP_ICR = 0x03; // 中断清除寄存器
读写数据:
unsigned char result;
SSP->SSP_DR = cData;
while( (SSP->SSP_SR & (1 << TFE)) == 0 ); // 等待TFE置位,即发送FIFO空
result = SSP->SSP_DR;
但是数据读不对,但用软件模拟可以
管脚配置:
P0->IODIR |= (1 << SCK1) | (1 << MOSI1);
P0->IOCLR = (1 << SCK1);
读写数据:
unsigned int i;
for (i = 0; i < 8; i ++) {
// _delay_loop_(1);
if (cData & 0x80) P0->IOSET = (1 << MOSI1);
else P0->IOCLR = (1 << MOSI1);
P0->IOSET = (1 << SCK1);
// _delay_loop_(1);
cData <<= 1;
if (P0->IOPIN & (1 << MISO1)) cData ++;
P0->IOCLR = (1 << SCK1);
// _delay_loop_(1);
}
result = cData;
答 1: 我的IIC读写float 也不好用。。。帮顶。。 答 2: SSP读写数据问题我也想知道,帮顶...........
高手上 答 3: SSP速率先降下来试试.回头我也看看datasheet. 答 4: 郁闷...可在LCD上输出,但不能在外部SPI上输入SPI一般输入数据不会在同一边沿,用软件模拟可以看出.
在方式0和方式3都通过软件模拟可以输入输出,但用SSP设置SPI方式怎么改都不行...
晕菜~~~难道SSP输入输出在同一边沿进行???不会这么乱搞吧... 答 5: 晕,搞这么多指针看你的设置:
PINSEL->PIN_SEL1 |= ((P0_17_SCK1 << P0_17_PINSEL) | (P0_18_MISO1 << P0_18_PINSEL) | (P0_19_MOSI1 << P0_19_PINSEL));
是不是有问题
另外,ssp方式要和外部器件对应,你用的外部器件是???? 答 6: 我晕菜~~~zlg的SSP例程真是害死菜农了!!!老鸟: 设置很完美~~~把菜农这次可害苦了!!!差点没跳楼!!!
搞了许多的SPI,这次可真是快"晚节不保"了...把我困了许久~~~
我晕!!!!!!!!!!!!!!!!!!!!!!!!!!!!!这是误人子弟呀... 答 7: 呵呵也有菜农搞不出来的难题?估计回头菜农还是自己灌水浇菜 答 8: 不要用他的例程,自己编一个呵呵,ssp应该没有问题,我用过.
好几天不见你了,还在菜地里猛干?? 答 9: 哈哈,小小的结构指针就吓到ARM老鸟了~~~确实我的例程很怪异~~~一般看来眼发晕~~~~~~~
最近农忙~~~ 答 10: 怎么个“误人子弟”????? 答 11: 好像:SSPDR的数据比LED数码管的显示要慢两个循环不信你运行开发板中的例子,Watch一下rcv看看。
还有Watch *(0xE0068008),(SSPDR的地址),再看看,这个我还没有试,明天再试。
另外,要问老农一个问题:
// SSP->SSP_IMSC = 0x07;
为何要注释掉?
(SSP->SSP_SR & (1 << TFE))
1 << TFE 是什么意思?
答 12: 谢谢各位,发帖当晚已解决全部问题 答 13: 怎么解决的说一下呀 答 14: 我眩晕~~~等书改过来再说... 答 15: 呵呵....... 答 16: 恭喜菜农种菜丰收 答 17: 晕到~~~困住菜农了一周时间而百思不解
我将CPHA,CPOL和SCR,CPSR的所有组合及速率都试了,都不行.
是我以下的程序(硬件SSP)不对吗???
谢谢!!!!!!
管脚配置:
POWER->P_CONP |= (1 << PCSPI1);
PINSEL->PIN_SEL1 |= ((P0_17_SCK1 << P0_17_PINSEL) | (P0_18_MISO1 << P0_18_PINSEL) | (P0_19_MOSI1 << P0_19_PINSEL));
SSP->SSP_CR0 = (0x01 << 8) | // SCR 设置SPI时钟分频0x01
(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位
SSP->SSP_CR1 = (0x00 << 3) | // SOD 从机输出禁能,1=禁止,0=允许
(0x00 << 2) | // MS 主从选择,0=主机,1=从机
(0x01 << 1) | // SSE SSP使能,1=允许SSP与其它设备通信
(0x00 << 0); // LBM 回写模式
SSP->SSP_CPSR = 0x52; // PCLK分频值
// SSP->SSP_IMSC = 0x07; // 中断屏蔽寄存器
SSP->SSP_ICR = 0x03; // 中断清除寄存器
读写数据:
unsigned char result;
SSP->SSP_DR = cData;
while( (SSP->SSP_SR & (1 << TFE)) == 0 ); // 等待TFE置位,即发送FIFO空
result = SSP->SSP_DR;
但是数据读不对,但用软件模拟可以
管脚配置:
P0->IODIR |= (1 << SCK1) | (1 << MOSI1);
P0->IOCLR = (1 << SCK1);
读写数据:
unsigned int i;
for (i = 0; i < 8; i ++) {
// _delay_loop_(1);
if (cData & 0x80) P0->IOSET = (1 << MOSI1);
else P0->IOCLR = (1 << MOSI1);
P0->IOSET = (1 << SCK1);
// _delay_loop_(1);
cData <<= 1;
if (P0->IOPIN & (1 << MISO1)) cData ++;
P0->IOCLR = (1 << SCK1);
// _delay_loop_(1);
}
result = cData;
答 1: 我的IIC读写float 也不好用。。。帮顶。。 答 2: SSP读写数据问题我也想知道,帮顶...........
高手上 答 3: SSP速率先降下来试试.回头我也看看datasheet. 答 4: 郁闷...可在LCD上输出,但不能在外部SPI上输入SPI一般输入数据不会在同一边沿,用软件模拟可以看出.
在方式0和方式3都通过软件模拟可以输入输出,但用SSP设置SPI方式怎么改都不行...
晕菜~~~难道SSP输入输出在同一边沿进行???不会这么乱搞吧... 答 5: 晕,搞这么多指针看你的设置:
PINSEL->PIN_SEL1 |= ((P0_17_SCK1 << P0_17_PINSEL) | (P0_18_MISO1 << P0_18_PINSEL) | (P0_19_MOSI1 << P0_19_PINSEL));
是不是有问题
另外,ssp方式要和外部器件对应,你用的外部器件是???? 答 6: 我晕菜~~~zlg的SSP例程真是害死菜农了!!!老鸟: 设置很完美~~~把菜农这次可害苦了!!!差点没跳楼!!!
搞了许多的SPI,这次可真是快"晚节不保"了...把我困了许久~~~
我晕!!!!!!!!!!!!!!!!!!!!!!!!!!!!!这是误人子弟呀... 答 7: 呵呵也有菜农搞不出来的难题?估计回头菜农还是自己灌水浇菜 答 8: 不要用他的例程,自己编一个呵呵,ssp应该没有问题,我用过.
好几天不见你了,还在菜地里猛干?? 答 9: 哈哈,小小的结构指针就吓到ARM老鸟了~~~确实我的例程很怪异~~~一般看来眼发晕~~~~~~~
最近农忙~~~ 答 10: 怎么个“误人子弟”????? 答 11: 好像:SSPDR的数据比LED数码管的显示要慢两个循环不信你运行开发板中的例子,Watch一下rcv看看。
还有Watch *(0xE0068008),(SSPDR的地址),再看看,这个我还没有试,明天再试。
另外,要问老农一个问题:
// SSP->SSP_IMSC = 0x07;
为何要注释掉?
(SSP->SSP_SR & (1 << TFE))
1 << TFE 是什么意思?
答 12: 谢谢各位,发帖当晚已解决全部问题 答 13: 怎么解决的说一下呀 答 14: 我眩晕~~~等书改过来再说... 答 15: 呵呵....... 答 16: 恭喜菜农种菜丰收 答 17: 晕到~~~困住菜农了一周时间而百思不解
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【笔记】生成报错synthdesignERROR被打赏50分 | |
【STM32H7S78-DK评测】LTDC+DMA2D驱动RGBLCD屏幕被打赏50分 | |
【STM32H7S78-DK评测】Coremark基准测试被打赏50分 | |
【STM32H7S78-DK评测】浮点数计算性能测试被打赏50分 | |
【STM32H7S78-DK评测】Execute in place(XIP)模式学习笔记被打赏50分 | |
每周了解几个硬件知识+buckboost电路(五)被打赏10分 | |
【换取逻辑分析仪】RA8 PMU 模块功能寄存器功能说明被打赏20分 | |
野火启明6M5适配SPI被打赏20分 | |
NUCLEO-U083RC学习历程2-串口输出测试被打赏20分 | |
【笔记】STM32CUBEIDE的Noruletomaketarget编译问题被打赏50分 |