I use Texas Instrumens Tiva C Series TM4C123G LaunchPad. The LaunchPad has a TM4C123GH6PM 80Mhz 32-bit Arm Cortex M4.
#include "tm4c123gh6pm.h" #include <stdlib.h> #include <stdint.h> void delay(unsigned long sec); int main(void){ SYSCTL_RCGCGPIO_R = 0x20; // Activate clock for Port F. while((SYSCTL_PRGPIO_R & 0x20)==0 ) {} // wait until port ready. GPIO_PORTF_LOCK_R = 0x4C4F434B; // Unlock GPIO Port F. GPIO_PORTF_CR_R = 0x1F; // Allow changes to PF4-0. GPIO_PORTF_AMSEL_R = 0x00; // Disable analog on Port F. GPIO_PORTF_PCTL_R = 0x00000000; // PCTL GPIO on PF4-0. GPIO_PORTF_DIR_R = 0x02; // Set PF3-1 output GPIO_PORTF_DEN_R = 0x02; // Enable only PF1 (red) GPIO_PORTF_DATA_R = 0; // Set RGB led to 0.(initial) while (1) { GPIO_PORTF_DATA_R = 0x02; // Turn on red led. delay(1); // Wait 1 sec. GPIO_PORTF_DATA_R = 0x00; // Turn off red led. delay(1); // Wait 1 sec. } } void delay(unsigned long sec){ unsigned long c,d; for(c=1; c<=sec; c++) for(d=0; d<400000; d++) {} // I dont ensure this number but } // I tried many many number from 40.000 to 40.000.000 // none of them worked.
My clock frequency is 80 Mhz.
Normally, the led lights up like that (picture on the left). But when I tried to apply blink code and add some delay between turn on and turn off code, the led lights up very very low power (picture on the right).
What is the problem of my code. Actually the code and the idea is very simple but I dont understand what is the problem.
Yunus3211 said:the led lights up very very low power
So maybe it is blinking - just too fast for you to see it?
Have you tried stepping this in the debugger? that should allow you to see it turning on & off.
Have you looked at the LED drive with an oscilloscope or logic analyser to see what's actually happening in the hardware?
These are basic debugging steps.
https://www.avrfreaks.net/comment/2418156#comment-2418156
BTW:
The indentation in your code has gone haywire! It's always a good idea to tidy up before posting to forums - you may even find the bug yourself in the process.
https://www.avrfreaks.net/comment/2508781#comment-2508781
Also, rather than all those "Magic Numbers", it's far better to use named constants
https://en.wikipedia.org/wiki/Magic_number_(programming)
Andy Neil said:It's always a good idea to tidy up before posting to forums
I definitely agree with you but I've tidied my code up before posting but when I share my question, my code is messed up. I dont know why this is happened.
By the way, thank you vey much your response. I will try to do what you said.
Yunus3211 said:when I share my question, my code is messed up. I dont know why this is happened.
Have you used TABs?
The interpretation of TABs is not fixed - so any code which relies upon them is doomed to get messed up when moved to a different system!
Simple rule: never use TABs - always use spaces only.
Any decent programmer's editor can be configured to insert spaces when you press the TAB button on your keyboard.
Any decent programmer's editor can convert TABs to spaces.
EDIT
https://community.arm.com/developer/tools-software/tools/f/keil-forum/25247/spaces-not-tabs-for-indentation
www.avrfreaks.net/.../2339751
#SpacesNotTabs #TabsAreEvil #TabsJustSayNo
Yunus3211 said:What is the problem of my code.
Simple: your delay() doesn't delay at all. There's not actually any reason it should work like you think it will.