打印
[学习笔记]

【AutoChips MCU评测报告】六、SPI

[复制链接]
1030|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
      本次实验使用了一块0.96寸128*64分辨率SPI接口OLED模块,利用AC7811QBGE微控制器片上的硬件SPI资源进行驱动,实现SPI主机写操作。实验工程依然使用了“AutoGen Studio”创建。下面是实验过程:

一、实验资源
1、AC7811-MINI开发板;
2、AutoGen Studio 1.2.0;
3、KEIL 5.28.0.0;
4、0.96寸128*64 OLED

二、资源简介
       AC7811QBGE微控制器片上有两个SPI模块,分为SPI1及SPI2。支持主、从及全双工模式,支持DMA,主机可编程传送比特率,传输帧格式可在4-16位选择等。





根据SPI时钟极性(CPOL)和时钟相位(CPHA)配置可分为不同的SPI模式:




当SPI设备空闲时的时钟极性(CPOL)决定了SCK线电平的高、低,即CPOL=0时SCK=0;CPOL=1时SCK=1。在数据采集时刻,CPHA=0时数据线上的信号将会在SCK时钟线的奇数边沿被采样;CPHA=1时数据线上的信号将会在SCK时钟线的偶数边沿被采样。本次实验中配置结果为CPOL=1;CPHA=1:


三、代码实现
利用“AutoGen Studio”创建的SPI2初始化代码:
/* SPI2 init function */
void ATC_SPI2_Init(void)
{
    SPI_ConfigType config;

    MSP_SPI_Init(SPI2);
    config.sckHigh = 5;
    config.sckLow = 5;
    config.csHold = 5;
    config.csSetup = 5;
    config.setting.csIdle = 5;
    config.setting.txEmptyIntEn = 0;
    config.setting.rxFullIntEn = 0;
    config.setting.txUnderflowIntEn = 0;
    config.setting.rxOverflowIntEn = 0;
    config.setting.master = 1;
    config.setting.modeErrorIntEn = 0;
    config.setting.dmaTxEn = 0;
    config.setting.dmaRxEn = 0;
    config.setting.cpol = 1;
    config.setting.cpha = 1;
    config.setting.txMsbFirst = 1;
    config.setting.rxMsbFirst = 1;
    config.setting.frmSize = 7;
    config.setting.csOutputEn = 0;
    config.setting.modeFaultEn = 0;
    config.setting.continuousCSEn = 0;
    config.setting.wakeUpEn = 0;
    config.setting.spiEn = 1;
    config.setting.swReset = 0;
    config.setting.intEn = 0;
    SPI_Initialize(SPI2, &config);
    SPI_TxOnlyEnable(SPI2);

}

对于SPI2的写操作只有一行代码:
/***************************************************************************
* 描  述 : SPI写一个字节数据函数
* 入  参 : Dat:写入的数据 mode=0写入命令;mode=1写入数据
* 返回值 : 无
**************************************************************************/
static void SPI_WriteByte(uint16_t Dat,uint8_t mode)                                       
{               
  if(mode == OLED_WR_CMD) OLED_DC_0;   
  else  OLED_DC_1;
   
        SPI_WritePoll(SPI2, &Dat, 1);
}

主函数中直接向OLED送显数据:
 LCD_P8x16Str(20,0,"AC7811-MINI");
        LCD_P8x16Str(24,2,"AC7811QBGE");
        LCD_P8x16Str(12,4,"TXONLY_MASTER");
        LCD_P8x16Str(12,6,"SPI2 0.96OLED");

四、实验结果



五、实验总结
      实验的成功总是会给我带来满心的喜悦和不小的成就感,当然这还是得益于“AutoGen Studio”软件使用的便捷、文档资料的全面以及AC781X系列微控制性能强大、易于操控的本质。

使用特权

评论回复

相关帖子

沙发
marginer| | 2020-6-15 13:49 | 只看该作者
LZ的系列专题做得不错,有写书的潜力

使用特权

评论回复
板凳
lisingch|  楼主 | 2020-6-15 14:32 | 只看该作者
marginer 发表于 2020-6-15 13:49
LZ的系列专题做得不错,有写书的潜力

谢谢领导的表扬和鼓励!继续努力

使用特权

评论回复
地板
jiuguang| | 2021-4-20 14:16 | 只看该作者
他的读函数呢,我写读函数的时候SCK没有时钟

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

14994

帖子

17

粉丝