关于硬件SPI的问题

void YJ_SPI1_CSH(unsigned char moshi,unsigned char ML)                    //SPI_1初始化

{

    RCC->APB2PCENR|=0x1<<2;                 //IO 的 PA 端口模块时钟使能位

    GPIOA->CFGLR&=~0xffff0000;

    GPIOA->CFGLR|=(0xb<<16|0xb<<20|0x8<<24|0xb<<28);


    GPIO_SetBits(GPIOA, GPIO_Pin_4);

    GPIO_SetBits(GPIOA, GPIO_Pin_5);

    GPIO_SetBits(GPIOA, GPIO_Pin_6);

    GPIO_SetBits(GPIOA, GPIO_Pin_7);

//    PA|=0Xf0;

//    GPIOA->OUTDR=PA;




    RCC->APB2PCENR|=0x1<<12;                //模块时钟开启

    SPI1->CTLR1&=~(0x1<<15);                //选择双线双向模式

    SPI1->CTLR1|=0x1<<11;                   //设置为16位

    SPI1->CTLR1&=~(0x1<<10);                //全双工模式


    SPI1->CTLR2|=0X1<<2;                    //SS 输出使能

    SPI1->CTLR1&=~(0x1<<9);                 //硬件控制 NSS 引脚

//  SPI1->CTLR1|=0x1<<9;                    //软件控制 NSS 引脚

//  SPI1->CTLR1|=0x1<<8;                    //NSS 为高电平



    SPI1->CTLR1&=~(0x1<<7);                  //先发送高低位复位

    SPI1->CTLR1|=ML<<7;                      //设置先发高位还是地位1:先发送 LSB;0:先发送 MSB

    SPI1->CTLR1&=~(0x7<<3);                  //波特率设置域,在通讯时不可以修改此域2分频

    SPI1->CTLR1|=(0x7<<3);


    SPI1->CTLR1|=1<<2;                       //配置为主设备

    SPI1->CTLR1&=~0x3;                       //

    SPI1->CTLR1|=moshi&0x3;                  //




    SPI1->CTLR2|=0x1<<7;                    //发送缓冲区空中断使能位



    SPI1->CTLR1|=1<<6;                       //启用 SPI


 //   GPIO_ResetBits(GPIOA, GPIO_Pin_4);


    //PA&=~0X10;

    //GPIOA->OUTDR=PA;




    *(volatile unsigned int *)0xE000E804&=~(0xff<<8);   //复位

    *(volatile unsigned int *)0xE000E804|=0xc0<<8;      //优先级配置位中高 2 位为抢占位,4 级中断嵌套;

    *(volatile unsigned int *)0xE000E448&=~(0xff<<16);   //嵌套0

    *(volatile unsigned int *)0xE000E104=0x1<<19;   //使能中断


}


void SPI1_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));                //SP1中断函数

void SPI1_IRQHandler(void)

{

    if(SPI1_TXE)

    {


        js++;

        SPI1_DR=0x123;




    }


}

Q9X1H0OLMVCX]OD})EZITRU.png

用逻辑分析仪发现NSS总是会有毛刺,同时MOSI也会有,导致数据不正确。(用软件控制NSS和硬件控制NSS都会有毛刺)

用的是CH32V307评估板


您好,这边使用EVT例程测试暂时未发现该类问题,若方便可将你的工程发至我的邮箱(lzs@wch.cn)具体看一下。


只有登录才能回复,可以选择微信账号登录