RISC-V技术william hill官网
直播中

h1654155781.3968

12年用户 65经验值
擅长:电源/新能源 控制/MCU RF/无线
私信 关注
[经验]

【中科昊芯Start_DSC28027勇士开发板试用体验】-开箱试用

拿到中科昊芯的开发板,资料很丰富,功能很强大,IDE也非常好用。
下载IDE开发环境,开发环境安装也非常容易,一键安装很快安装完成。给满分。
windows10对对仿真器的识别也是很快的。

从官网下载好IDE之后,就可以导入例程,中科昊芯的例程也写的很好,非常容易理解。
首先介绍下原理,设置定时器1ms中断,主程序对中断次数循环计数,360次中断即360ms通过iic接口向数码管发送显示指令,显示指令包括(千位,百位,十位,个位),还做了按键中断响应,当按下101按键时,递增千位数值,当按下103按键时,计数清零,数码管显示0000。
        原理不复杂,用到了定时器中断,按键中断和iic通信。详细程序如下。

  • int main(void)
  • {
  •         /*初始化系统控制*/
  •         InitSysCtrl();
  •         /*初始化LED*/
  •         InitLED();
  •         /* 清除所有中断和初始化PIE向量表*/
  •         /*禁用CPU中断*/
  •         DINT;
  •         /*初始化PIE控制寄存器到默认状态,默认状态是全部PIE中断被禁用和标志位被清除*/
  •         InitPieCtrl();
  •         /*禁用CPU中断和清除所有CPU中断标志位*/
  •         IER = 0x0000;
  •         IFR = 0x0000;
  •         /*初始化PIE中断向量表,为PIE向量表中的所有中断向量配置对应向量的入口地址*/
  •         InitPieVectTable();
  •         /*定时器0初始化*/
  •         timer0_init();
  •         /*初始化IIC总线的Gpio*/
  •         InitI2C_Gpio();
  •         /*IIC初始化*/
  •         I2CA_Init();
  •         /*软件复位IIC从设备*/
  •         softResetIIC_BUS();
  •         //printf("rnTM1650 init...");//标准C的printf输出测试,串口调试助手设置波特率128000bps,ASCII格式显示
  •         /*BIT6到BIT4为亮度调节,BIT0是  1 开启/0关闭*/
  •         LigntVal = 0x11;
  •         /*1级亮度,开启显示*/
  •         TM1650_Send(CMD_SEG, LigntVal);
  •         /*DIG0-DIG3均显示0*/
  •         TM1650_Send(DIG0, SEG7Table[0]);
  •         TM1650_Send(DIG1, SEG7Table[0]);
  •         TM1650_Send(DIG2, SEG7Table[0]);
  •         TM1650_Send(DIG3, SEG7Table[0]);
  •         /*使能全局中断*/
  •         EINT;
  •         /*使能调试事件*/
  •         while(1)
  •         {
  •                 /*间隔为360ms*/
  •                 if(CpuTimer0.InterruPTCount >= 360)
  •                 {
  •                         /*定时器0中断次数清零*/
  •                         CpuTimer0.InterruptCount = 0;
  •                         /*D401翻转*/
  •                         GpioDataRegs.GPATOGGLE.bit.GPIO6 = 1;
  •                         /*Tmp累加,从0-999循环*/
  •                         Tmp++;
  •                         if(Tmp > 999)
  •                                 Tmp = 0;
  •                         /*DIG1显示Tmp的百位*/
  •                         TM1650_Send(DIG1, SEG7Table[Tmp / 100]);
  •                         /*DIG2显示Tmp的十位*/
  •                         TM1650_Send(DIG2, SEG7Table[(Tmp / 10) % 10]);
  •                         /*DIG3显示Tmp的个位*/
  •                         TM1650_Send(DIG3, SEG7Table[Tmp % 10]);
  •                         /*TM1650获取扫描按键S101 S102 S103,控制数码管数字显示及亮度调节*/
  •                         TM1650_Read(CMD_KEY, &keyVal);
  •                         /*S101按下时,DIG0显示内容+1*/
  •                         if(keyVal == 0x44)
  •                         {
  •                                 keyReg++;
  •                                 keyReg &= 0x0f;
  •                                 TM1650_Send(DIG0, SEG7Table[keyReg]);
  •                         }
  •                         /*S102按下时,改变数码管显示亮度*/
  •                         if(keyVal == 0x4c)  //
  •                         {
  •                                 /*高四位为亮度调节,最后1位是开启、关闭显示*/
  •                                 LigntVal = (LigntVal + 0x20) & 0x7F;
  •                                 /*1级亮度,开启显示*/
  •                                 TM1650_Send(CMD_SEG, LigntVal);
  •                         }
  •                         /*按下S103时*/
  •                         if(keyVal == 0x54)
  •                         {
  •                                 Tmp = 0;
  •                                 keyReg = 0;
  •                                 /*DIG0-DIG3清零*/
  •                                 TM1650_Send(DIG0, SEG7Table[0]);
  •                                 TM1650_Send(DIG1, SEG7Table[0]);
  •                                 TM1650_Send(DIG2, SEG7Table[0]);
  •                                 TM1650_Send(DIG3, SEG7Table[0]);
  •                                 /*D400翻转*/
  •                                 GpioDataRegs.GPATOGGLE.bit.GPIO7 = 1;
  •                         }
  •                 }
  •         }
  • }
烧写可写入flash,也可写入ram。写入ram计算会更快一些,可以把一些无状态的函数放到ram中,有状态函数和存储数据库放到flash中。
        debug过程中需要讲拨码开关全部拨到左侧。在ide中进行debug,通过watch面板观察断点时变量值,也可以通过live view观察变量值的连续变化情况。




回帖(2)

haawking

2022-7-26 11:07:17
感谢对昊芯的支持,使用过程中如果有问题,欢迎随时发帖提问或者找我们的技术人员
举报

月蓉小豆包

2022-7-26 16:46:51
昊芯冲冲冲!!没有抢到好可惜,,
举报

更多回帖

发帖
×
20
完善资料,
赚取积分