怎么将内部16M的时钟作为SSI的时钟源?需要配置哪些寄存器?

2019-07-30 15:21发布

求助各位大神 我的系统时钟设置成80M(这个必须这个不能改了) 而我用ssi读写的EEPROM支持的最大时钟只有20M因此我想用内部的那个PIOSC(16M)作为SSI的时钟源这样跟系统时钟没冲突可以吗?
查看了手册之后我做了如下设置(我的ssi时钟源通过设置ssiicc以piosc为时钟源这样可以吗)结果没用,有懂的吗  怎么配置  需要注意什么?
void SSI_init(void)
{
        HWREG(0x400fe000+ 0x61c) = 0x2;
        //SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI1); //为SSI提供时钟
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);//为GPIOF端口提供时钟

    //SSIDisable(SSI1_BASE);

    HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY_DD;
    HWREG(GPIO_PORTF_BASE + GPIO_O_CR) = 0x1;

    HWREG(SSI1_BASE + SSI_O_CR1) = 0X0;//sse位置0禁能SSI
   //SSIClockSourceSet(SSI1_BASE,SSI_CLOCK_PIOSC);//API选择ssi时钟源
   //设置SPI为主机模式0,8位数据宽度,1M的波特率//
// SSIConfigSetExpClk(SSI1_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0,SSI_MODE_MASTER, 1000000, 8);

    HWREG(SSI1_BASE + SSI_O_CC) = 0x5;//时钟源选择,该处选中PIOSC
    HWREG(SSI1_BASE + SSI_O_CPSR)= 0x4;//时钟预分频,2-254之间的偶数
    HWREG(SSI1_BASE + SSI_O_CR0)=0x307;//设置SCR,极性,相位,模式,位宽度

   HWREG(SSI1_BASE + SSI_O_CR1) = 0X2;//sse位置1使能SSI

        GPIOPinConfigure(GPIO_PF3_SSI1FSS);//SSI功能复用配置
        GPIOPinConfigure(GPIO_PF2_SSI1CLK);
        GPIOPinConfigure(GPIO_PF1_SSI1TX);
        GPIOPinConfigure(GPIO_PF0_SSI1RX);
    GPIOPinTypeSSI(GPIO_PORTF_BASE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);

    //SSIEnable(SSI1_BASE);

        //  配置片选管脚为输出
    GPIODirModeSet(GPIO_PORTF_BASE,GPIO_PIN_3, GPIO_DIR_MODE_OUT);
    GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_3,GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
xyz549040622
2019-07-31 08:22
SSI的时钟可以为系统时钟,也可以为PIOSC,如下图所示
QQ截图20150314105428.png
但是因为你的ssi读写的EEPROM支持的最大时钟只有20M,你可以在80MHZ的系统时钟上面分频,不用选择16MHZ了,但是分频后的时钟还要注意以下一点
QQ截图20150314105323.png

一周热门 更多>