主题中讨论的其他器件:TM4C123
我意识到这是一个用于基于 TI 的编译器的论坛、但我正在尝试使采用 SPI 的 Max6675热电偶发挥作用、但似乎无法实现。 我的所有设置都是正确的、但在接收时、不会发生这种情况、即 SSI1->DR 保持为空、即使所有设置都是正确插入的引脚、并且我以相对较低的时钟速度以10kHz 运行。 下面显示的是代码、是否有人可以提供任何建议?
#include "TM4C123.h"//器件标头
#include
void SSI1_init (void);
void SSI1_READ_TEMP();
空 Timer0AMsDelay (int delay);
int main(){
SSI1_init();
Timer0AMsDelay (1000);
SSI1_READ_TEMP ();
while (1){}
}
void SSI1_init (void){
SYSCTl->RCGCSSI |= 0x02;//为 SSI1启用时钟
SYSCTl->RCGCGPIO |= 8;//启用 GPIOD 的时钟
SYSCTl->RCGCGPIO |= 0x20;//启用 GPIOF 时钟
GPIOD->AMSEL &=~0x05;/*禁用这些引脚的模拟*/
GPIOD->DEN |= 0x05;//数字使能 GPIOD、引脚0和引脚2
GPIOD->AFSEL |= 0x05;//备用功能使能 GPIOD、引脚0和引脚2
GPIOD->PCTL &=~0x00000F0F;
GPIOD->PCTL |= 0x00000202;//为 GPIOD 使能 SSI1 SCK、引脚0和为 GPIOD 使能 SSI1 RX、引脚2。 p1351 0010 0000 0010
GPIOF->DEN |= 0x04;//数字使能 GPIOF、引脚2
GPIOF->DIR |= 0x04;//GPIOF、引脚2被设定为输出
GPIOF->PUR |= 0x4;//GPIOF、引脚2被设定为输出
GPIOF->data |= 0x04;//
SSI1->CR1 = 0;//清除使能位以更改参数
SSI1->CC = 0;//
SSI1->CPSR |= 0x20;/*预分频器除以32*/
SSI1->CR0 |= 0x310F;//再将时钟 div 乘以50得到10kHz、SPI 模式主控、
16位数据、CPOL = 0、CPHA = 1 -> 0b 0011 0001 0000 1111 *
SSI1->CR1 |= 0x2;//启用 SSI1 */
}
void SSI1_READ_TEMP (){
uint16_t data = 0;
GPIOF->data &=~0x04;
while (!(SSI1->SR & 0x8)){}//p974 -等待此处、而接收非空为 true
数据= SSI1->DR;//将数据写入数据寄存器
while (SSI1->SR & 0x10){}//p974 -等待 SSI 忙线
GPIOF->data |=0x04;
}
空 Timer0AMsDelay (int delay){
sysctl->RCGCTIMER |= 1;
TIMER0->CTL = 0;
TIMER0->CFG = 0x04;
TIMER0->TAMR = 0x02;
TIMER0->TAILR = 16000 - 1;
TIMER0->ICR = 0x1;
TIMER0->CTL = 0x01;
for (int i = 0;i < delay;i++)
{
while ((TIMER0->RIS & 0x1)=0){}
TIMER0->ICR = 0x1;
}
}