【中科昊芯Start_DSC28027勇士开发板试用体验】开发环境搭建+跑通例程

描述

本文来源电子发烧友社区,作者:jf_53933321, 帖子地址:https://bbs.elecfans.com/jishu_2286219_1_1.html

本文分为两部分:开发环境搭建和
跑通例程

1. 开发环境搭建        首先按照文档从官网下下来安装包,装好之后导入例程,准备开始编译。
        然后就遇到了第一个坑,我本机的开发环境比较复杂,从嵌入式开发到客户端软件开发,从后台服务到前端web都有,什么nodejs,python,vs2012,idea都有,光jdk和eclipse就装了好几个版本。导致Haawking IDE装好之后,例程导入不管怎么编译都报错,卸了重装也不行,报错如下。后来还是在官方技术人员gengzh的帮助下才发现是本机上装有mingw,和haawking的编译环境冲突了。
中科昊芯


中科昊芯

2. 跑通例程
        选了一个数码管显示递增数字的例程HX_DSC28027_IIC_TM1650来跑。
        首先介绍下原理,设置定时器1ms中断,主程序对中断次数循环计数,360次中断即360ms通过iic接口向数码管发送显示指令,显示指令包括(千位,百位,十位,个位),还做了按键中断响应,当按下101按键时,递增千位数值,当按下103按键时,计数清零,数码管显示0000。
        原理不复杂,用到了定时器中断,按键中断和iic通信。详细程序如下。


  1.  
  2. int main(void)
  3. {
  4.         /*初始化系统控制*/
  5.         InitSysCtrl();
  6.  
  7.         /*初始化LED*/
  8.         InitLED();
  9.  
  10.         /* 清除所有中断和初始化PIE向量表*/
  11.         /*禁用CPU中断*/
  12.         DINT;
  13.         /*初始化PIE控制寄存器到默认状态,默认状态是全部PIE中断被禁用和标志位被清除*/
  14.         InitPieCtrl();
  15.         /*禁用CPU中断和清除所有CPU中断标志位*/
  16.         IER = 0x0000;
  17.         IFR = 0x0000;
  18.         /*初始化PIE中断向量表,为PIE向量表中的所有中断向量配置对应向量的入口地址*/
  19.         InitPieVectTable();
  20.  
  21.         /*定时器0初始化*/
  22.         timer0_init();
  23.  
  24.         /*初始化IIC总线的Gpio*/
  25.         InitI2C_Gpio();
  26.         /*IIC初始化*/
  27.         I2CA_Init();
  28.         /*软件复位IIC从设备*/
  29.         softResetIIC_BUS();
  30.         //printf("rnTM1650 init...");//标准C的printf输出测试,串口调试助手设置波特率128000bps,ASCII格式显示
  31.  
  32.         /*BIT6到BIT4为亮度调节,BIT0是  1 开启/0关闭*/
  33.         LigntVal = 0x11;
  34.         /*1级亮度,开启显示*/
  35.         TM1650_Send(CMD_SEG, LigntVal);
  36.         /*DIG0-DIG3均显示0*/
  37.         TM1650_Send(DIG0, SEG7Table[0]);
  38.         TM1650_Send(DIG1, SEG7Table[0]);
  39.         TM1650_Send(DIG2, SEG7Table[0]);
  40.         TM1650_Send(DIG3, SEG7Table[0]);
  41.  
  42.         /*使能全局中断*/
  43.         EINT;
  44.         /*使能调试事件*/
  45.  
  46.         while(1)
  47.         {
  48.                 /*间隔为360ms*/
  49.                 if(CpuTimer0.InterruptCount >= 360)
  50.                 {
  51.                         /*定时器0中断次数清零*/
  52.                         CpuTimer0.InterruptCount = 0;
  53.  
  54.                         /*D401翻转*/
  55.                         GpioDataRegs.GPATOGGLE.bit.GPIO6 = 1;
  56.  
  57.                         /*Tmp累加,从0-999循环*/
  58.                         Tmp++;
  59.                         if(Tmp > 999)
  60.                                 Tmp = 0;
  61.  
  62.                         /*DIG1显示Tmp的百位*/
  63.                         TM1650_Send(DIG1, SEG7Table[Tmp / 100]);
  64.                         /*DIG2显示Tmp的十位*/
  65.                         TM1650_Send(DIG2, SEG7Table[(Tmp / 10) % 10]);
  66.                         /*DIG3显示Tmp的个位*/
  67.                         TM1650_Send(DIG3, SEG7Table[Tmp % 10]);
  68.  
  69.                         /*TM1650获取扫描按键S101 S102 S103,控制数码管数字显示及亮度调节*/
  70.                         TM1650_Read(CMD_KEY, &keyVal);
  71.  
  72.                         /*S101按下时,DIG0显示内容+1*/
  73.                         if(keyVal == 0x44)
  74.                         {
  75.                                 keyReg++;
  76.                                 keyReg &= 0x0f;
  77.                                 TM1650_Send(DIG0, SEG7Table[keyReg]);
  78.                         }
  79.  
  80.                         /*S102按下时,改变数码管显示亮度*/
  81.                         if(keyVal == 0x4c)  //
  82.                         {
  83.                                 /*高四位为亮度调节,最后1位是开启、关闭显示*/
  84.                                 LigntVal = (LigntVal + 0x20) & 0x7F;
  85.  
  86.                                 /*1级亮度,开启显示*/
  87.                                 TM1650_Send(CMD_SEG, LigntVal);
  88.                         }
  89.  
  90.                         /*按下S103时*/
  91.                         if(keyVal == 0x54)
  92.                         {
  93.                                 Tmp = 0;
  94.                                 keyReg = 0;
  95.  
  96.                                 /*DIG0-DIG3清零*/
  97.                                 TM1650_Send(DIG0, SEG7Table[0]);
  98.                                 TM1650_Send(DIG1, SEG7Table[0]);
  99.                                 TM1650_Send(DIG2, SEG7Table[0]);
  100.                                 TM1650_Send(DIG3, SEG7Table[0]);
  101.  
  102.                                 /*D400翻转*/
  103.                                 GpioDataRegs.GPATOGGLE.bit.GPIO7 = 1;
  104.                         }
  105.                 }
  106.         }
  107. }
  108.  
复制代码

       烧写可写入flash,也可写入ram。写入ram计算会更快一些,可以把一些无状态的函数放到ram中,有状态函数和存储数据库放到flash中。
        debug过程中需要讲拨码开关全部拨到左侧。在ide中进行debug,通过watch面板观察断点时变量值,也可以通过live view观察变量值的连续变化情况。
        最后上一个烧写成功,正在运行的图。再次感谢官方技术人员gengzh。
中科昊芯
 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分