打印
[技术相关]

【SWM166-SPI-Y1.28C1测评】之一:开箱测试

[复制链接]
4683|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
      这是我接触的比较好的开源旋转钮显示屏,主控为SWM166 系列 32 位 MCU(以下简称 SWM166) 内嵌 ARM® Cortex®-M0 内核,高可靠性、低功耗、代码密度大等突出特点,可应用于工业控制、电机控制、白色家电等多种领域。SWM166 支持片上包含精度为 1%以内的 12M 时钟及 PLL 模块, 最高支持 90MHz 的时钟输出。同时提供最大为 64K 字节的 FLASH 和最大 8K 字节的 SRAM。此外,芯片支持向量表重映射和CACHE 单周期取指、 ISP(在系统编程)操作及 IAP(在应用编程) , 支持用户可自定义 BOOT 程序和加密操作。SWM166 外设串行总线包括最多 2 个 UART 接口, 2 个 SPI 接口(一个支持四线 QSPI), 1 个 I2C接口(支持主/择) , 1 个 CAN 接口,此外还具有 1 个 16 位看门狗定时器, 3 组 32 位(24位计数器+8 位预分频) 加强型定时器, 4 组 32 位(24 位计数器+8 位预分频) 基础型定时器, 1个 16 位正交编码器(QEI)模块, 1 个 16 位的 MPU 接口模块, 4 通道(每个通道均可扩展为具备死区的互补模式) 16 位 PWM 模块, 1 个除法器(DIV), 1 个旋转坐标计算模块(CORDIC),1 个最多 12 通道、 12 位、 1MSPS 的逐次逼近型 ADC 模块,并提供欠压中断及复位等功能。
   

圆形屏的原理图,PCB厂家都开源,圆形屏用华芯微特的成本,性价超级高,自护可控,简直是白色家电的福音。




  底板把排线引脚支持双串口,下载口,一个自主可控GPIO,可以用来ADC采样或者普通IO口使用。





底层程序做的非常好,标准库做的,用户可以移植LVGL的GUI,SPI+DMA 刷屏杠杠滴,外扩flash


void SetSPI_4Bit(uint8_t Flag)
{
        //ÅäÖóÉ4BitÐÎʽ
        if(Flag == 1)
        {
                SPI_Close(SPI0);
                SPI0->CTRL &= ~SPI_CTRL_FFS_Msk;
                SPI0->CTRL |=  (3 << SPI_CTRL_FFS_Pos);
                SPI0->SPIMCR = (1 << SPI_SPIMCR_EN_Pos)                 |
                                         ((Len_Buf - 1) << SPI_SPIMCR_RDLEN_Pos)         |
                                         ((8 - 1)   << SPI_SPIMCR_DUMMY_Pos);
                SPI_Open(SPI0);
        }
        //ÅäÖóÉ1BitÐÎʽ
        else
        {
                SPI0->CTRL &= ~(1 << SPI_CTRL_DMARXEN_Pos);
       
                SPI_Close(SPI0);
                SPI0->SPIMCR = 0;
                SPI0->CTRL &= ~SPI_CTRL_FFS_Msk;
                SPI0->CTRL |= (0 << SPI_CTRL_FFS_Pos);
                SPI_Open(SPI0);
        }
}

//void



void LogSend256(uint8_t * Buf)
{
        for(uint16_t j = 0; j < 256; j++)
        {
                if(j % 16 == 0)
                {
                        printf("\n");
                }
                printf("%02X ",Buf[j]);
        }
}

void SPI_DMA_SendGet_Init(void)
{
        DMA_InitStructure DMA_initStruct;
       
       
        /*·¢Ë͵½LCD*/               
        SPI1->CTRL &= ~SPI_CTRL_DMATXEN_Msk;
        SPI1->CTRL |= (1 << SPI_CTRL_DMATXEN_Pos);
        DMA_initStruct.Mode = DMA_MODE_SINGLE;
        DMA_initStruct.Unit = DMA_UNIT_HALFWORD;
        DMA_initStruct.Count = Len_Buf/2;
//        DMA_initStruct.SrcAddr = (uint32_t)&color;
        DMA_initStruct.SrcAddrInc = 1;
        DMA_initStruct.DstAddr = (uint32_t)&SPI1->DATA;
        DMA_initStruct.DstAddrInc = 0;
        DMA_initStruct.Handshake = DMA_CH0_SPI1TX;
        DMA_initStruct.Priority = DMA_PRI_LOW;
        DMA_initStruct.INTEn = 1;
        DMA_CH_Init(DMA_CH0, &DMA_initStruct);
//        DMA_CH_Open(DMA_CH0);
       
       
        /*´ÓSPI-Flash¶ÁÈ¡*/       
        /*211ÅäÖÃ*/
//        DMA_InitStructure DMA_initStruct;
        //SPI0 RX DMA
        DMA_initStruct.Mode = DMA_MODE_SINGLE;
        DMA_initStruct.Unit = DMA_UNIT_BYTE;
        DMA_initStruct.Count = Len_Buf;
        DMA_initStruct.SrcAddr = (uint32_t)&SPI0->DATA;
        DMA_initStruct.SrcAddrInc = 0;
//        DMA_initStruct.DstAddr = (uint32_t)buff;
        DMA_initStruct.DstAddrInc = 1;
        DMA_initStruct.Handshake = DMA_CH1_SPI0RX;
        DMA_initStruct.Priority = DMA_PRI_LOW;
        DMA_initStruct.INTEn = 1;
        DMA_CH_Init(DMA_CH1, &DMA_initStruct);
       
//        DMA_CH_Open(DMA_CH0);
       
}


使用特权

评论回复

相关帖子

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

本版积分规则

认证:项目经理
简介:资深嵌入式开发工程师

83

主题

155

帖子

3

粉丝