神奇的bootloader !大神们进来看看!

2019-03-24 20:22发布

本帖最后由 285844685 于 2015-9-3 08:45 编辑
  1. 代码是往5922恒流led驱动里写数, 用jtag往里烧的时候都能正常运行,但是第三种写法用bootloader往里刷的程序就不能正常运行 ,上电后会卡死,程序跑飞。第一种写法用bootloader就正常。
复制代码Program Memory Usage         :        27030 bytes   19.4 % Full
Data Memory Usage                 :        1159 bytes   14.1 % Full

大神们帮看看是什么情况。

  1. void TLC5922_WriteDC(unsigned char dc)
  2. {
  3.         unsigned char i,j;
  4.         TLC5922_Mode_DC;   //MODE = 1;
  5.         XTAL1_Output_is_Low;  //XLAT = 0;
  6.         Sclk_Output_is_Low;   //SCLK = 0;
  7.         Sin1_Output_is_Low;   //SIN  = 0;
  8.         for(i=0;i<112;i++) //每?个?led一°?个?dc字á?节¨2
  9.         {
  10.                 for(j=0;j<7;j++)  //dc_number范¤?围¡ì0~127   dc7bit依°¨¤次ä?串ä?行D写¡ä入¨?
  11.                 {
  12.                         Sclk_Output_is_Low;  //SCLK = 0;
  13.                         if((dc&0x40)==0x40)
  14.                         {
  15.                                 Sin1_Output_is_Hig;  //SIN = 1;
  16.                         }
  17.                         else if((dc&0x40)==0)
  18.                         {
  19.                                 Sin1_Output_is_Low; //SIN = 0;
  20.                         }
  21.                         Sclk_Output_is_Low;
  22.                         delay_us(1);
  23.                         Sclk_Output_is_Hig;
  24.                         delay_us(1);
  25.                         Sclk_Output_is_Low;
  26.                         dc <<= 1;    //左ᨮ移°?一°?位?
  27.                 }
  28.                 dc=127;          //下?一°?个?字á?节¨2
  29.         }
  30.         XTAL1_Output_is_Low;
  31.         XTAL2_Output_is_Low;
  32.         XTAL3_Output_is_Low;
  33.         XTAL4_Output_is_Low;
  34.         XTAL5_Output_is_Low;
  35.         XTAL6_Output_is_Low;
  36.         XTAL7_Output_is_Low;
  37.         delay_us(1);
  38.         XTAL1_Output_is_Hig;
  39.         XTAL2_Output_is_Hig;
  40.         XTAL3_Output_is_Hig;
  41.         XTAL4_Output_is_Hig;
  42.         XTAL5_Output_is_Hig;
  43.         XTAL6_Output_is_Hig;
  44.         XTAL7_Output_is_Hig;
  45.         delay_us(1);
  46.         XTAL1_Output_is_Low;
  47.         XTAL2_Output_is_Low;
  48.         XTAL3_Output_is_Low;
  49.         XTAL4_Output_is_Low;
  50.         XTAL5_Output_is_Low;
  51.         XTAL6_Output_is_Low;
  52.         XTAL7_Output_is_Low;   //XLAT = 1//XLAT 高?电ì?平?将?点ì?校¡ê正y数oy据Y锁?存ä?到ì? 7Bit DC Register
  53.         delay_us(1);
  54. }




  55. void TLC5922_WriteDC(unsigned char dc)
  56. {
  57.         unsigned char i,j;
  58.         unsigned char temp;
  59.         TLC5922_Mode_DC;   //MODE = 1;
  60.         XTAL1_Output_is_Low;  //XLAT = 0;
  61.         Sclk_Output_is_Low;   //SCLK = 0;
  62.         Sin1_Output_is_Low;   //SIN  = 0;
  63.         temp=dc;
  64.         for(i=0;i<LED_NUMBER;i++) //每个led一个dc字节
  65.         {
  66.                 for(j=0;j<7;j++)  //dc_number范围0~127   dc7bit依次串行写入
  67.                 {
  68.                         Sclk_Output_is_Low;  //SCLK = 0;
  69.                         if((temp&0x40)==0x40)
  70.                         {
  71.                                 Sin1_Output_is_Hig;  //SIN = 1;
  72.                         }
  73.                         else if((temp&0x40)==0)
  74.                         {
  75.                                 Sin1_Output_is_Low; //SIN = 0;
  76.                         }
  77.                         Sclk_Output_is_Low;
  78.                         delay_us(1);
  79.                         Sclk_Output_is_Hig;
  80.                         delay_us(1);
  81.                         Sclk_Output_is_Low;
  82.                         temp <<= 1;    //左移一位
  83.                 }
  84.                 temp=dc;           //下一个字节
  85.         }
  86.        
  87.         XTAL1_Output_is_Low;
  88.         XTAL2_Output_is_Low;
  89.         XTAL3_Output_is_Low;
  90.         XTAL4_Output_is_Low;
  91.         XTAL5_Output_is_Low;
  92.         XTAL6_Output_is_Low;
  93.         XTAL7_Output_is_Low;
  94.         delay_us(1);
  95.         XTAL1_Output_is_Hig;
  96.         XTAL2_Output_is_Hig;
  97.         XTAL3_Output_is_Hig;
  98.         XTAL4_Output_is_Hig;
  99.         XTAL5_Output_is_Hig;
  100.         XTAL6_Output_is_Hig;
  101.         XTAL7_Output_is_Hig;
  102.         delay_us(1);
  103.         XTAL1_Output_is_Low;
  104.         XTAL2_Output_is_Low;
  105.         XTAL3_Output_is_Low;
  106.         XTAL4_Output_is_Low;
  107.         XTAL5_Output_is_Low;
  108.         XTAL6_Output_is_Low;
  109.         XTAL7_Output_is_Low;   //XLAT = 1//XLAT 高电平将点校正数据锁存到 7Bit DC Register
  110.         delay_us(1);
  111. }


  112. void TLC5922_WriteDC(unsigned char *dc)
  113. {
  114.         unsigned char i,j;
  115.         TLC5922_Mode_DC;   //MODE = 1;
  116.         XTAL1_Output_is_Low;  //XLAT = 0;
  117.         Sclk_Output_is_Low;   //SCLK = 0;
  118.         Sin1_Output_is_Low;   //SIN  = 0;
  119.        
  120.         for(i=0;i<LED_NUMBER;i++) //每个led一个dc字节
  121.         {
  122.                 for(j=0;j<7;j++)  //dc_number范围0~127   dc7bit依次串行写入
  123.                 {
  124.                         Sclk_Output_is_Low;  //SCLK = 0;
  125.                         if((*dc&0x40)==0x40)
  126.                         {
  127.                                 Sin1_Output_is_Hig;  //SIN = 1;
  128.                         }
  129.                         else if((*dc&0x40)==0)
  130.                         {
  131.                                 Sin1_Output_is_Low; //SIN = 0;
  132.                         }
  133.                         Sclk_Output_is_Low;
  134.                         delay_us(1);
  135.                         Sclk_Output_is_Hig;
  136.                         delay_us(1);
  137.                         Sclk_Output_is_Low;
  138.                         *dc <<= 1;    //左移一位
  139.                 }
  140.                 dc ++;           //下一个字节
  141.         }
  142.         XTAL1_Output_is_Low;
  143.         XTAL2_Output_is_Low;
  144.         XTAL3_Output_is_Low;
  145.         XTAL4_Output_is_Low;
  146.         XTAL5_Output_is_Low;
  147.         XTAL6_Output_is_Low;
  148.         delay_us(1);
  149.         XTAL1_Output_is_Hig;
  150.         XTAL2_Output_is_Hig;
  151.         XTAL3_Output_is_Hig;
  152.         XTAL4_Output_is_Hig;
  153.         XTAL5_Output_is_Hig;
  154.         XTAL6_Output_is_Hig;;
  155.         delay_us(1);
  156.         XTAL1_Output_is_Low;
  157.         XTAL2_Output_is_Low;
  158.         XTAL3_Output_is_Low;
  159.         XTAL4_Output_is_Low;
  160.         XTAL5_Output_is_Low;
  161.         XTAL6_Output_is_Low;;   //XLAT = 1//XLAT 高电平将点校正数据锁存到 7Bit DC Register
  162.         delay_us(1);
  163. }
复制代码

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。