这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【1.19更新ePWM】Snake0301的DSP学习进程

共42条 3/5 1 2 3 4 5 跳转至
高工
2013-10-29 20:04:15     打赏
21楼

今晚玩按键,用按键去控制流水灯的速度。

符晓老师的那本教材灰常不错,很详细地解释了F28335的各种内涵。

下面所有的代码,均在20楼的基础上进行修改。

位定义:

在20楼LED位定义的前提,增加按键位的定义,按键使用GPIOB的58-61管脚。

#define KEY0_DIR    GpioCtrlRegs.GPBDIR.bit.GPIO58  
#define KEY1_DIR    GpioCtrlRegs.GPBDIR.bit.GPIO59
#define KEY2_DIR    GpioCtrlRegs.GPBDIR.bit.GPIO60
#define KEY3_DIR    GpioCtrlRegs.GPBDIR.bit.GPIO61

子函数与主函数:
GPIO初始化子函数添加

KEY0_DIR = IN;
KEY1_DIR = IN;
KEY2_DIR = IN;
KEY3_DIR = IN;


void LED_Blink(long double t) //LED Blink子函数
{LED0_ON;
LED1_ON;
LED2_ON;
LED3_ON;
LED4_ON;
LED5_ON;
LED6_ON;
LED7_ON;
DELAY_US(t);
LED0_OFF;
LED1_OFF;
LED2_OFF;
LED3_OFF;
LED4_OFF;
LED5_OFF;
LED6_OFF;
LED7_OFF;
DELAY_US(t);
}

void LED_GO(long double t) // LED 流水灯子函数
{LED0_ON;
 DELAY_US(t);
 LED0_OFF;
 LED1_ON;
 DELAY_US(t);
 LED1_OFF;
 LED2_ON;
 DELAY_US(t);
 LED2_OFF;
 LED3_ON;
 DELAY_US(t);
 LED3_OFF;
 LED4_ON;
 DELAY_US(t);
 LED4_OFF;
 LED5_ON;
 DELAY_US(t);
 LED5_OFF;
 LED6_ON;
 DELAY_US(t);
 LED6_OFF;
 LED7_ON;
 DELAY_US(t);
 LED7_OFF;
}


void main()
{ Uint32 KeyValue = 0;
 InitSysCtrl(); //系统初始化
  DINT;//关闭全局中断
 InitPieCtrl();//初始化中断控制寄存器
  IER = 0x0000;//关闭CPU中断
  IFR = 0x0000;//清除CPU中断信号
 InitPieVectTable();//初始化中断向量表
 Gpio_init();
 while(1)
 { KeyValue = GpioDataRegs.GPBDAT.all & 0x3C000000;
   switch(KeyValue)
    {case 0x3C000000:LED_Blink(200000);break;
     case 0x1C000000:LED_GO(100000);break;
     case 0x2C000000:LED_GO(200000);break;
     case 0x34000000:LED_GO(400000);break;
     case 0x38000000:LED_GO(800000);break;
    }
 }

}


视频伺候:



视频地址:http://player.youku.com/player.php/sid/XNjI3ODkzODUy/v.swf

一些情况及感想:

程序比较简单,没有防抖没有中断,调试过程很快。

如果时间ok的话,想把DSP所有的外设都系统地捣腾一遍,再捣腾捣腾浮点运算和graph。



高工
2013-10-29 23:56:23     打赏
22楼

晚上找来一个4位8段数码管,简单玩了一下。

动态扫描,技术到9999,显示erro,通过按键跳出erro,从0计数。

主函数:

void main()
{unsigned int count=0,KeyValue=0;
 InitSysCtrl(); //系统初始化
  DINT;//关闭全局中断
 InitPieCtrl();//初始化中断控制寄存器
  IER = 0x0000;//关闭CPU中断
  IFR = 0x0000;//清除CPU中断信号
 InitPieVectTable();//初始化中断向量表
 Gpio_init();
 Seg_dis_init();
start:while(count<=9999)
{ count++;
DELAY_US(1);      //这里太搞了,修改参数居然速度不变,后来不知神马情况又会变化了。
Seg_Dis_all(count);
}
while(count>9999)
{   Seg_dis_erro();
    KeyValue = GpioDataRegs.GPCDAT.all & 0x00000008;
    if(KeyValue==0)
    {
    count = 0;
    goto start;
    }
}
}

很久没用goto指令了,今天重温一下,嘿嘿,蛮好用。

其他的代码不贴了,有兴趣的童鞋自由下载:smg.rar

视频伺候:




视频地址:http://player.youku.com/player.php/sid/XNjI3OTc2MzQ0/v.swf

一些情况及感想:

吐槽一下,开发板木有电源引出,只有一组直接从USB取电的端子,不是很方便。

俺这个4位数码管共阳,Vcc端接入USB电压,F28335输出的高电平还是足够点亮数码管的。

好在把手头上的3.3v电源小板用起,才解决问题。

还在捣腾这些简单的IO,期待深入的学习啊。

库里面有个函数DELAY_US(),很不解。比如上面主函数里面调用DELAY_US(1),居然和DELAY_US(100)、DELAY_US(100xxx)的延时效果一致,貌似入口参数没起作用。后来反复折腾,不知怎么的又ok了,不会和外设时钟有关吧?我顿时湿了,求版主科普啊。


高工
2013-10-30 10:30:24     打赏
23楼
delayus(1)和delayus(100),肉眼是看不出区别的,因为单位是微秒啊,至少得弄成50Hz以下的闪烁频率肉眼才能看出来

高工
2013-10-30 12:10:24     打赏
24楼
版主没看视频,哈哈 数码管从0~9999计数,1us和100us在数码管上肉体还是能感觉出来的。 也试过ms级,情况相同。 不知道是不是仿真器问题。

高工
2013-10-30 19:38:59     打赏
25楼
早上上班在公司打开网页偷瞄了一眼,哪敢明目张胆看视频啊,一会看看。。。

高工
2013-10-31 20:17:37     打赏
26楼
现在看出区别了,挺明显的啊,难道有程序执行不正常的情况。。。

高工
2013-10-31 23:13:33     打赏
27楼

呃,今天 调试发现上次调试的信息还会有残存,一些数组没有进行操作,数据也会发生变化。

很奇怪,不知道是怎么回事。

编译器、DSP芯片、仿真器都有可能有bug。


高工
2013-11-01 00:56:32     打赏
28楼

晚上调试串口通信,一切顺利。

顺道用串口做了个简单的交互界面,只判断几个字符串,然后对应输出字符串。

光盘给了SCIC的代码,用的是串口中断,还算比较好理解。

看这个简单的交互界面,想起了小时候的小霸王学习机,吼吼,有空把 小霸王学习机 复刻一次。

代码:

懒得贴了,直接上附件吧,想玩的童鞋直接下起:simpleGUI.rar

视频伺候:


视频地址:http://player.youku.com/player.php/sid/XNjI4ODQ2NzI4/v.swf

一些情况:

串口硬件调试还是相对比较简单,玩串口的过程中,发现字符串的处理比串口本身要复杂。

难怪串口这么多年了,还有不少人在研究新的串口通信协议。

老师说中断里面就不要处理数据了,可惜在主函数里面比较字符串并输出总是有点瑕疵,干脆都丢在中断服务程序里面搞定了。



专家
2013-11-01 08:56:34     打赏
29楼
很好的帖子!

专家
2013-11-01 08:57:19     打赏
30楼
很认真的同学,鼓励!

共42条 3/5 1 2 3 4 5 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]