不一样的LED跑马灯实验
登录瑞萨的云编译器,看着《arduino学习》的书籍。简单的入手函数setup();简单的配置,单一的Loop()函数,已有的demo示例代码。点击编译即可……云云 这里不再赘述,请大家参考 瑞萨小鱼 及 campozeng 的帖子(参见附1,附2)即可。我去做我的“突围”事情了。 上面的几句无不表示一个词“简单”那arduino有多简单,让我们与TI Stellaris LM3S811,ST STM32F103这三个型号做一个对比,就知道Arduino有多“简单”了。 让我们首先看一下LM3S811:
登录瑞萨的云编译器,看着《arduino学习》的书籍。简单的入手函数setup();简单的配置,单一的Loop()函数,已有的demo示例代码。点击编译即可……云云 这里不再赘述,请大家参考 瑞萨小鱼 及 campozeng 的帖子(参见附1,附2)即可。我去做我的“突围”事情了。 上面的几句无不表示一个词“简单”那arduino有多简单,让我们与TI Stellaris LM3S811,ST STM32F103这三个型号做一个对比,就知道Arduino有多“简单”了。 让我们首先看一下LM3S811:
SysCtlClockSet(SYSCTL_SYSDIV_8 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_6MHZ);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);GPIODirModeSet(LED3_PORT, LED3_PIN, GPIO_DIR_MODE_OUT);
GPIOPadConfigSet(LED3_PORT, LED3_PIN, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD);
While(TRUE) { GPIOPinWrite(LED3_PORT, LED3_PIN, LED3_PIN); OSTimeDlyHMSM(0, 0, 0, 100); GPIOPinWrite(LED3_PORT, LED3_PIN, ~LED3_PIN); OSTimeDlyHMSM(0, 0, 0, 100); } 至此,简单的LED灯闪烁完成;以上对于LM3S芯片还需要添加jtag保护,修改启动文件等等…… 下面我们再来看看stm32f103的LED灯的设置与启动过程: SystemInit();RCC_APB2PeriphClockCmd(RCC_APB2Periph_LED | RCC_APB2Periph_AFIO, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO初始化结构体 GPIO_InitStructure.GPIO_Pin = LED1_PIN | LED2_PIN | LED3_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOF, &GPIO_InitStructure); While(TRUE) { GPIO_ResetBits(LED_PORT, LED1_PIN); Delayms(5); GPIO_SetBits(LED_PORT, LED1_PIN); Delayms(5); } 还好ST公司将启动文件与sysinit已经写好了,可是还有这么多行…… 下面我们再来看看arduino如何呢? void setup() {pinMode(PIN_LED0,OUTPUT);
} void loop() { digitalWrite(PIN_LED0, 1); delay(INTERVAL); digitalWrite(PIN_LED0, 0); delay(INTERVAL); } 嘿嘿,还是Arduino简单吧!现在瑞萨居然把编译器都省得装了。硬盘资源占有为0%,正好适合我们这使用小容量SSD硬盘的用户。 新一轮的sakura开发板即将开始申请了,亲爱的坛友们,你们还觉得Arduino难吗? 附1:瑞萨小鱼的sakura开发进程http://forum.eepw.com.cn/thread/222365/1 附2:Campozeng的sakura开发进程http://forum.eepw.com.cn/thread/222049/1使用Timer产生周期性中断级 Arduino系统肯定使用了一个timer来提供系统的基准时钟间隔,否则其自带的delay函数则无法使用。那么我们在使用timer时,肯定不能占用其预定义的定时器,否则系统其可能崩溃。那我们就试试初始化16位定时器吧~~
void init_tmr16()
{ //Wakeup TMR0,TMR1 MSTP(TMR0) = 0; //TCORA is 20ms count //48000kHz(48MHz)*20/8192 TMR0.TCORA = 48000 * 20 / 8192 - 1; //TCORA is 50 times count TMR1.TCORA = 50 - 1; //TCNT0 clear by compare match A TMR0.TCR.BIT.CCLR = 1; TMR1.TCR.BIT.CCLR = 1; //TCNT0 counts for compare match of TCORA TMR1.TCCR.BIT.CSS = 3; //CMIEA is enable TMR1.TCR.BIT.CMIEA = 1; //CMIA1 is enable IEN(TMR1,CMIA1) = 1; //CMIA1 interrupt Level is 1 IPR(TMR1,CMIA1) = 1; }void start_tmr16(void)
{ //count start //CSS internal clock //CKS is PCLK/8192 TMR0.TCCR.BYTE = 0x0E; } 使用时,初始化后,然后调用start_tmr16()来开启定时器。 因为传说中的云编译器使用的为GCC编译器,因此,其对中断原型函数声明须要使用关键字 __INTERUPT_FUNC,如下所示:Void Excep_TMR1_CMIA1(void) __INTERUPT_FUNC;
#pragme interrupt 这样的声明多为在其它C编译器环境下的声明方式。
参考文献: 1. 使用TM0中断,瑞萨小鱼,http://forum.eepw.com.cn/thread/222365/2#15 2. Timer Interrupt http://www.renesasrulz.com/docs/DOC-2414 3. http://www.renesasrulz.com/message/19394#19394回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |