怎么将内部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条回答
luofeng2g
1楼-- · 2019-07-30 21:07
 精彩回答 2  元偷偷看……
dirtwillfly
2楼-- · 2019-07-31 03:01
@xyz549040622 帮忙给看看
sayato
3楼-- · 2019-07-31 05:26
luofeng2g 发表于 2015-3-12 13:07
没有冲突的,具体怎么配置找个例程看看!

是没有冲突,我上面的程序虽然配置了,但是我怎么感觉这个内部时钟怎么没有用一样;这种例程不好找吧
xyz549040622
4楼-- · 2019-07-31 08:22
SSI的时钟可以为系统时钟,也可以为PIOSC,如下图所示
QQ截图20150314105428.png
但是因为你的ssi读写的EEPROM支持的最大时钟只有20M,你可以在80MHZ的系统时钟上面分频,不用选择16MHZ了,但是分频后的时钟还要注意以下一点
QQ截图20150314105323.png
sayato
5楼-- · 2019-07-31 09:45
xyz549040622 发表于 2015-3-14 10:56
SSI的时钟可以为系统时钟,也可以为PIOSC,如下图所示

但是因为你的ssi读写的EEPROM支持的最大时钟只有20M ...

谢谢大哥能认真看完我的帖子,还看饿手册,但是按你说的这个思路,采用系统时钟分频,那个SSICPSR寄存器的值是根据你系统时钟,库函数自动算好填进去的,80M的话cpsr分频数是2那才40M没达到要求,再者我不用库函数直接操作了寄存器不知道为什么还是没用,说明**作的不对我预设的值没有写进寄存器这是很不明白的地方?
xyz549040622
6楼-- · 2019-07-31 14:00
 精彩回答 2  元偷偷看……

一周热门 更多>