SPI00 做从机启动SS00

// 修改发现有的 功能可以随意映射,有的功能是固定的。

#define SPI_START() SCI0->SS0 |= _0001_SCI_CH0_STOP_TRG_ON
#define SPI_STOP()  SCI0->ST0 |= _0001_SCI_CH0_STOP_TRG_ON

// bref: spi11 初始化 从机
// para:
// note:
static void spi00_init(void)
{
    uint8_t dap, ckp;
    
    spi_mode_t mode = SPI_MODE_0;
    
    
    dap = ~mode & 0x01;
    ckp = (~mode & 0x02) >> 1;
    // SCI0 时钟开启
    CGC->PER0 |= CGC_PER0_SCI0EN_Msk;
    // 停止通道0
    SCI0->ST0 |= _0000_SCI_CH3_STOP_TRG_OFF;
    // 分频器 
    SCI0->SPS0 |= (0 << SCI0_SPS0_PRS01_Pos);
    // 
    SCI0->SIR00 = _0004_SCI_SIRMN_FECTMN | _0002_SCI_SIRMN_PECTMN | _0001_SCI_SIRMN_OVCTMN;
    // SPI传输空中断
    SCI0->SMR00 = _0020_SMRMN_DEFAULT_VALUE | _8000_SCI_CLOCK_SELECT_CK01 | _4000_SCI_CLOCK_MODE_TI0N |
                  _0000_SCI_TRIGGER_SOFTWARE | _0000_SCI_MODE_SPI | _0000_SCI_TRANSFER_END;
    // SPI
    SCI0->SCR00 = _0004_SCRMN_DEFAULT_VALUE | _C000_SCI_RECEPTION_TRANSMISSION | dap << 13 | ckp << 12 | _0000_SCI_INTSRE_MASK |
                  _0000_SCI_PARITY_NONE | _0000_SCI_MSB | _0000_SCI_STOP_NONE | _0003_SCI_LENGTH_8;
    // 8分频
    SCI0->SDR00 = 0;
    /* Set output enable */
    if ((mode == SPI_MODE_0) || (mode == SPI_MODE_1))
    {
        SCI0->SO0 &= ~_0800_SCI_CH3_CLOCK_OUTPUT_1;
    }
    if ((mode == SPI_MODE_2) || (mode == SPI_MODE_3))
    {
        SCI0->SO0 |= _0800_SCI_CH3_CLOCK_OUTPUT_1;
    }
    SCI0->SOE0 |= _0001_SCI_CH0_OUTPUT_ENABLE;
    MISC->ISC = 0x80;
    // SPI00 时钟映射到P10 0x03代表映射到P10 数据手册25页
    PORT->SCKI00PCFG = 0x03;        /* P10 default Alternate function */ 
    // 数据模式
    PORT->PMC1 &= ~(1 << 0);    /* P10 digital function */ 
    // 输入
    PORT->PM1  |= (1 << 0);     /* P10 is used as SCLK11 input */ 
    
    // P11 作为SDI00
    PORT->SDI00PCFG = 0x04; 
    // 数字模式 
    PORT->PMC1 &= ~(1 << 1); 
    // 输入
    PORT->PM1  |= (1 << 1); 
    
    // P12 作为SDO00
    PORT->P12CFG = 0x05; 
    // 数字模式 
    PORT->PMC1 &= ~(1 << 2); 
    // 输出
    PORT->PM1  &= ~(1 << 2); 
    
    
 
    // P13--SS00
    PORT->SS00PCFG = 0x06;       /* P13 default Alternate function */ 
    // 数字模式 
    PORT->PMC1 &= ~(1 << 3);    /* P13 digital function */ 
    // 输入
    PORT->PM1  |= (1 << 3);    /* P13 is used as SS11 input */ 

    PORT->PU1 |= (1<<3); // P13 上拉电阻
    SCI0->SO0 |= _0000_SCI_CH0_DATA_OUTPUT_0;
  
   // SCI0->SS0 |= _0008_SCI_CH3_START_TRG_ON;
    // 置位为1 才是清除标志位
    SCI0->SIR00  |= 0x07;
    SPI_START();

}

 

 MISC->ISC = 0x80;为启动 SS0检测。

输入的复用功能,可以映射到一些端口上。

输出端口。

 

测试模式0 数据错位。如果先启动从机后启动主机,数据容易错位,如果先启动主机后启动从机,数据正常。

测试在运行过程中,复位启动主从两个其中任意一个,都会造成数据错位。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值