potentieller Lösungsweg, kann ihn nicht ausprobieren
This commit is contained in:
parent
ed2f2736d0
commit
fb89de5354
Binary file not shown.
@ -0,0 +1,202 @@
|
||||
/* ***************************************************************************************
|
||||
* Project: task1 - C:GPIO
|
||||
* File: task1.c
|
||||
*
|
||||
* Language: C
|
||||
*
|
||||
* Hardware: STefi Light v1.1
|
||||
* Processor: STM32G431KBT6U
|
||||
*
|
||||
* Author: Manuel Lederhofer
|
||||
* Datum: 10.09.2021
|
||||
*
|
||||
* Version: 2.1
|
||||
* History:
|
||||
* 10.09.2021 ML create project
|
||||
* 09.03.2022 ML port from STM32F042K6T6 to STM32G431KBT6U
|
||||
* 18.02.2025 TK changed projectname to "C: GPIO)
|
||||
*
|
||||
* Status: under development
|
||||
*
|
||||
* Description:
|
||||
* Blinks the red LED of STefi Light, currently.
|
||||
* This file contains the main routine and the initialization.
|
||||
*
|
||||
* Notes:
|
||||
* - MCU speed at startup is 16 MHz
|
||||
*
|
||||
* Todo:
|
||||
* - Change the example code to match the description and requirements
|
||||
* of the requested application in the lab exercise guide.
|
||||
*
|
||||
************************************************************************************** */
|
||||
|
||||
/* ------------------------------------ INCLUDES -------------------------------------- */
|
||||
#include "stm32g431xx.h"
|
||||
#include "STefi-Light.h"
|
||||
|
||||
|
||||
/* ------------------------------------ DEFINES --------------------------------------- */
|
||||
#define LOOPS_PER_MS 1244 // NOP-loops for delay()
|
||||
#define WAITTIME 500
|
||||
#define FIRST_LED 0
|
||||
#define LAST_LED 3
|
||||
#define UP 1
|
||||
#define DOWN -1
|
||||
|
||||
|
||||
/* ------------------------------------ TYPE DEFINITIONS ------------------------------ */
|
||||
/* ------------------------------------ GLOBAL VARIABLES ------------------------------ */
|
||||
int state = 0;
|
||||
/* ------------------------------------ PRIVATE VARIABLES ----------------------------- */
|
||||
|
||||
|
||||
/* ------------------------------------ PROTOTYPES ------------------------------------ */
|
||||
static void GPIO_init(void);
|
||||
static void delay(const uint16_t ms);
|
||||
static void blink(const unint numLED);
|
||||
|
||||
|
||||
/* ------------------------------------ M A I N --------------------------------------- */
|
||||
int main(void)
|
||||
{
|
||||
/* --- initialization --- */
|
||||
__disable_irq(); // disable interrupts globally
|
||||
|
||||
GPIO_init();
|
||||
|
||||
__enable_irq(); // enable interrupts globally
|
||||
|
||||
|
||||
/* --- one time tasks --- */
|
||||
|
||||
|
||||
/* --- infinite processing loop --- */
|
||||
while (1)
|
||||
{
|
||||
/* ... add your code to implement the lab assignment ... */
|
||||
int direction;
|
||||
int i = 0;
|
||||
while(1){
|
||||
if(i == FIRST_LED){
|
||||
direction = UP;
|
||||
}
|
||||
else if(i == LAST_LED){
|
||||
direction = DOWN;
|
||||
}
|
||||
blink(i);
|
||||
if(direction == UP){
|
||||
i++;
|
||||
}
|
||||
else if(direction == DOWN){
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
switch (state) {
|
||||
case 0:
|
||||
GPIOA->ODR &= ~(1 << 0); // LED0 on
|
||||
GPIOA->ODR &= ~(1 << 1);
|
||||
GPIOA->ODR &= ~(1 << 2);
|
||||
GPIOA->ODR &= ~(1 << 3);
|
||||
|
||||
state++;
|
||||
break;
|
||||
case 1:
|
||||
delay(WAITTIME); // wait
|
||||
state++;
|
||||
break;
|
||||
case 2:
|
||||
GPIOA->ODR |= (1 << 0); // LED0 off
|
||||
GPIOA->ODR |= (1 << 1);
|
||||
GPIOA->ODR |= (1 << 2);
|
||||
GPIOA->ODR |= (1 << 3);
|
||||
delay(WAITTIME); // wait
|
||||
state = 0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/* ------------------------------------ GLOBAL FUNCTIONS ------------------------------ */
|
||||
|
||||
|
||||
/* ------------------------------------ PRIVATE FUNCTIONS ----------------------------- */
|
||||
|
||||
/* ------------------------------------------------------------------------------------ *\
|
||||
* method: static void GPIO_init(void)
|
||||
*
|
||||
* Initializes GPIOs on STefi Light for pins with peripherals attached.
|
||||
*
|
||||
* requires: - nothing -
|
||||
* parameters: - none -
|
||||
* returns: - nothing -
|
||||
\* ------------------------------------------------------------------------------------ */
|
||||
static void GPIO_init(void)
|
||||
{
|
||||
/* enable port clocks */
|
||||
RCC->AHB2ENR |= RCC_AHB2ENR_GPIOAEN; // LEDs: A
|
||||
|
||||
|
||||
/* --- LEDs --- */
|
||||
GPIOA->ODR |= MASK_LED_ALL;
|
||||
GPIOA->MODER &= ~(3 << 0);
|
||||
GPIOA->MODER &= ~(3 << 2);
|
||||
GPIOA->MODER &= ~(3 << 4);
|
||||
GPIOA->MODER &= ~(3 << 6);
|
||||
GPIOA->MODER |= (1 << 0); // set LED pin to output
|
||||
GPIOA->MODER |= (1 << 2);
|
||||
GPIOA->MODER |= (1 << 4);
|
||||
GPIOA->MODER |= (1 << 6);
|
||||
}
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------------------ *\
|
||||
* method: static void delay(const uint16_t ms)
|
||||
*
|
||||
* Realizes a millisecond delay by very bad busy-wait.
|
||||
*
|
||||
* requires: - nothing -
|
||||
* parameters: ms - delay time in milliseconds
|
||||
* returns: - nothing -
|
||||
\* ------------------------------------------------------------------------------------ */
|
||||
static void delay(const uint16_t ms)
|
||||
{
|
||||
for (uint16_t i = 0; i < ms; ++i)
|
||||
{
|
||||
for (uint16_t j = 0; j < LOOPS_PER_MS; ++j)
|
||||
{
|
||||
__asm("NOP");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void blink(const uint numLED)
|
||||
{
|
||||
switch (state) {
|
||||
case 0:
|
||||
GPIOA->ODR &= ~(1 << numLED); // LEDX on
|
||||
state++;
|
||||
break;
|
||||
case 1:
|
||||
delay(WAITTIME); // wait
|
||||
state++;
|
||||
break;
|
||||
case 2:
|
||||
GPIOA->ODR |= (1 << numLED); // LEDX off
|
||||
delay(WAITTIME); // wait
|
||||
state = 0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
/* ************************************ E O F ***************************************** */
|
||||
@ -0,0 +1,158 @@
|
||||
/* ***************************************************************************************
|
||||
* Project: task1 - C:GPIO
|
||||
* File: task1.c
|
||||
*
|
||||
* Language: C
|
||||
*
|
||||
* Hardware: STefi Light v1.1
|
||||
* Processor: STM32G431KBT6U
|
||||
*
|
||||
* Author: Manuel Lederhofer
|
||||
* Datum: 10.09.2021
|
||||
*
|
||||
* Version: 2.1
|
||||
* History:
|
||||
* 10.09.2021 ML create project
|
||||
* 09.03.2022 ML port from STM32F042K6T6 to STM32G431KBT6U
|
||||
* 18.02.2025 TK changed projectname to "C: GPIO)
|
||||
*
|
||||
* Status: under development
|
||||
*
|
||||
* Description:
|
||||
* Blinks the red LED of STefi Light, currently.
|
||||
* This file contains the main routine and the initialization.
|
||||
*
|
||||
* Notes:
|
||||
* - MCU speed at startup is 16 MHz
|
||||
*
|
||||
* Todo:
|
||||
* - Change the example code to match the description and requirements
|
||||
* of the requested application in the lab exercise guide.
|
||||
*
|
||||
************************************************************************************** */
|
||||
|
||||
/* ------------------------------------ INCLUDES -------------------------------------- */
|
||||
#include "stm32g431xx.h"
|
||||
#include "STefi-Light.h"
|
||||
|
||||
|
||||
/* ------------------------------------ DEFINES --------------------------------------- */
|
||||
#define LOOPS_PER_MS 1244 // NOP-loops for delay()
|
||||
#define WAITTIME 500
|
||||
|
||||
|
||||
/* ------------------------------------ TYPE DEFINITIONS ------------------------------ */
|
||||
/* ------------------------------------ GLOBAL VARIABLES ------------------------------ */
|
||||
int state = 0;
|
||||
/* ------------------------------------ PRIVATE VARIABLES ----------------------------- */
|
||||
|
||||
|
||||
/* ------------------------------------ PROTOTYPES ------------------------------------ */
|
||||
static void GPIO_init(void);
|
||||
static void delay(const uint16_t ms);
|
||||
|
||||
|
||||
/* ------------------------------------ M A I N --------------------------------------- */
|
||||
int main(void)
|
||||
{
|
||||
/* --- initialization --- */
|
||||
__disable_irq(); // disable interrupts globally
|
||||
|
||||
GPIO_init();
|
||||
|
||||
__enable_irq(); // enable interrupts globally
|
||||
|
||||
|
||||
/* --- one time tasks --- */
|
||||
|
||||
|
||||
/* --- infinite processing loop --- */
|
||||
while (1)
|
||||
{
|
||||
/* ... add your code to implement the lab assignment ... */
|
||||
|
||||
switch (state) {
|
||||
case 0:
|
||||
GPIOA->ODR &= ~(1 << 0); // LED0 on
|
||||
GPIOA->ODR &= ~(1 << 1);
|
||||
GPIOA->ODR &= ~(1 << 2);
|
||||
GPIOA->ODR &= ~(1 << 3);
|
||||
|
||||
state++;
|
||||
break;
|
||||
case 1:
|
||||
delay(WAITTIME); // wait
|
||||
state++;
|
||||
break;
|
||||
case 2:
|
||||
GPIOA->ODR |= (1 << 0); // LED0 off
|
||||
GPIOA->ODR |= (1 << 1);
|
||||
GPIOA->ODR |= (1 << 2);
|
||||
GPIOA->ODR |= (1 << 3);
|
||||
delay(WAITTIME); // wait
|
||||
state = 0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/* ------------------------------------ GLOBAL FUNCTIONS ------------------------------ */
|
||||
|
||||
|
||||
/* ------------------------------------ PRIVATE FUNCTIONS ----------------------------- */
|
||||
|
||||
/* ------------------------------------------------------------------------------------ *\
|
||||
* method: static void GPIO_init(void)
|
||||
*
|
||||
* Initializes GPIOs on STefi Light for pins with peripherals attached.
|
||||
*
|
||||
* requires: - nothing -
|
||||
* parameters: - none -
|
||||
* returns: - nothing -
|
||||
\* ------------------------------------------------------------------------------------ */
|
||||
static void GPIO_init(void)
|
||||
{
|
||||
/* enable port clocks */
|
||||
RCC->AHB2ENR |= RCC_AHB2ENR_GPIOAEN; // LEDs: A
|
||||
|
||||
|
||||
/* --- LEDs --- */
|
||||
GPIOA->ODR |= MASK_LED_ALL;
|
||||
GPIOA->MODER &= ~(3 << 0);
|
||||
GPIOA->MODER &= ~(3 << 2);
|
||||
GPIOA->MODER &= ~(3 << 4);
|
||||
GPIOA->MODER &= ~(3 << 6);
|
||||
GPIOA->MODER |= (1 << 0); // set LED pin to output
|
||||
GPIOA->MODER |= (1 << 2);
|
||||
GPIOA->MODER |= (1 << 4);
|
||||
GPIOA->MODER |= (1 << 6);
|
||||
}
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------------------ *\
|
||||
* method: static void delay(const uint16_t ms)
|
||||
*
|
||||
* Realizes a millisecond delay by very bad busy-wait.
|
||||
*
|
||||
* requires: - nothing -
|
||||
* parameters: ms - delay time in milliseconds
|
||||
* returns: - nothing -
|
||||
\* ------------------------------------------------------------------------------------ */
|
||||
static void delay(const uint16_t ms)
|
||||
{
|
||||
for (uint16_t i = 0; i < ms; ++i)
|
||||
{
|
||||
for (uint16_t j = 0; j < LOOPS_PER_MS; ++j)
|
||||
{
|
||||
__asm("NOP");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* ************************************ E O F ***************************************** */
|
||||
@ -0,0 +1,198 @@
|
||||
/* ***************************************************************************************
|
||||
* Project: task1 - C:GPIO
|
||||
* File: task1.c
|
||||
*
|
||||
* Language: C
|
||||
*
|
||||
* Hardware: STefi Light v1.1
|
||||
* Processor: STM32G431KBT6U
|
||||
*
|
||||
* Author: Manuel Lederhofer
|
||||
* Datum: 10.09.2021
|
||||
*
|
||||
* Version: 2.1
|
||||
* History:
|
||||
* 10.09.2021 ML create project
|
||||
* 09.03.2022 ML port from STM32F042K6T6 to STM32G431KBT6U
|
||||
* 18.02.2025 TK changed projectname to "C: GPIO)
|
||||
*
|
||||
* Status: under development
|
||||
*
|
||||
* Description:
|
||||
* Blinks the red LED of STefi Light, currently.
|
||||
* This file contains the main routine and the initialization.
|
||||
*
|
||||
* Notes:
|
||||
* - MCU speed at startup is 16 MHz
|
||||
*
|
||||
* Todo:
|
||||
* - Change the example code to match the description and requirements
|
||||
* of the requested application in the lab exercise guide.
|
||||
*
|
||||
************************************************************************************** */
|
||||
|
||||
/* ------------------------------------ INCLUDES -------------------------------------- */
|
||||
#include "stm32g431xx.h"
|
||||
#include "STefi-Light.h"
|
||||
|
||||
|
||||
/* ------------------------------------ DEFINES --------------------------------------- */
|
||||
#define LOOPS_PER_MS 1244 // NOP-loops for delay()
|
||||
#define WAITTIME 500
|
||||
|
||||
|
||||
/* ------------------------------------ TYPE DEFINITIONS ------------------------------ */
|
||||
/* ------------------------------------ GLOBAL VARIABLES ------------------------------ */
|
||||
int state = 0;
|
||||
/* ------------------------------------ PRIVATE VARIABLES ----------------------------- */
|
||||
|
||||
|
||||
/* ------------------------------------ PROTOTYPES ------------------------------------ */
|
||||
static void GPIO_init(void);
|
||||
static void delay(const uint16_t ms);
|
||||
static void blink(const unint numLED);
|
||||
|
||||
|
||||
/* ------------------------------------ M A I N --------------------------------------- */
|
||||
int main(void)
|
||||
{
|
||||
/* --- initialization --- */
|
||||
__disable_irq(); // disable interrupts globally
|
||||
|
||||
GPIO_init();
|
||||
|
||||
__enable_irq(); // enable interrupts globally
|
||||
|
||||
|
||||
/* --- one time tasks --- */
|
||||
|
||||
|
||||
/* --- infinite processing loop --- */
|
||||
while (1)
|
||||
{
|
||||
/* ... add your code to implement the lab assignment ... */
|
||||
int direction;
|
||||
while(1){
|
||||
int i;
|
||||
if(i == 0){
|
||||
direction = 1;
|
||||
}
|
||||
else if(i == 4){
|
||||
direction = -1;
|
||||
}
|
||||
blink(1);
|
||||
if(direction > 0){
|
||||
i++;
|
||||
}
|
||||
else if(direction < 0){
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
switch (state) {
|
||||
case 0:
|
||||
GPIOA->ODR &= ~(1 << 0); // LED0 on
|
||||
GPIOA->ODR &= ~(1 << 1);
|
||||
GPIOA->ODR &= ~(1 << 2);
|
||||
GPIOA->ODR &= ~(1 << 3);
|
||||
|
||||
state++;
|
||||
break;
|
||||
case 1:
|
||||
delay(WAITTIME); // wait
|
||||
state++;
|
||||
break;
|
||||
case 2:
|
||||
GPIOA->ODR |= (1 << 0); // LED0 off
|
||||
GPIOA->ODR |= (1 << 1);
|
||||
GPIOA->ODR |= (1 << 2);
|
||||
GPIOA->ODR |= (1 << 3);
|
||||
delay(WAITTIME); // wait
|
||||
state = 0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/* ------------------------------------ GLOBAL FUNCTIONS ------------------------------ */
|
||||
|
||||
|
||||
/* ------------------------------------ PRIVATE FUNCTIONS ----------------------------- */
|
||||
|
||||
/* ------------------------------------------------------------------------------------ *\
|
||||
* method: static void GPIO_init(void)
|
||||
*
|
||||
* Initializes GPIOs on STefi Light for pins with peripherals attached.
|
||||
*
|
||||
* requires: - nothing -
|
||||
* parameters: - none -
|
||||
* returns: - nothing -
|
||||
\* ------------------------------------------------------------------------------------ */
|
||||
static void GPIO_init(void)
|
||||
{
|
||||
/* enable port clocks */
|
||||
RCC->AHB2ENR |= RCC_AHB2ENR_GPIOAEN; // LEDs: A
|
||||
|
||||
|
||||
/* --- LEDs --- */
|
||||
GPIOA->ODR |= MASK_LED_ALL;
|
||||
GPIOA->MODER &= ~(3 << 0);
|
||||
GPIOA->MODER &= ~(3 << 2);
|
||||
GPIOA->MODER &= ~(3 << 4);
|
||||
GPIOA->MODER &= ~(3 << 6);
|
||||
GPIOA->MODER |= (1 << 0); // set LED pin to output
|
||||
GPIOA->MODER |= (1 << 2);
|
||||
GPIOA->MODER |= (1 << 4);
|
||||
GPIOA->MODER |= (1 << 6);
|
||||
}
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------------------ *\
|
||||
* method: static void delay(const uint16_t ms)
|
||||
*
|
||||
* Realizes a millisecond delay by very bad busy-wait.
|
||||
*
|
||||
* requires: - nothing -
|
||||
* parameters: ms - delay time in milliseconds
|
||||
* returns: - nothing -
|
||||
\* ------------------------------------------------------------------------------------ */
|
||||
static void delay(const uint16_t ms)
|
||||
{
|
||||
for (uint16_t i = 0; i < ms; ++i)
|
||||
{
|
||||
for (uint16_t j = 0; j < LOOPS_PER_MS; ++j)
|
||||
{
|
||||
__asm("NOP");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void blink(const uint numLED)
|
||||
{
|
||||
switch (state) {
|
||||
case 0:
|
||||
GPIOA->ODR &= ~(1 << numLED); // LED0 on
|
||||
state++;
|
||||
break;
|
||||
case 1:
|
||||
delay(WAITTIME); // wait
|
||||
state++;
|
||||
break;
|
||||
case 2:
|
||||
GPIOA->ODR |= (1 << numLED); // LED0 off
|
||||
delay(WAITTIME); // wait
|
||||
state = 0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
/* ************************************ E O F ***************************************** */
|
||||
@ -0,0 +1,179 @@
|
||||
/* ***************************************************************************************
|
||||
* Project: task1 - C:GPIO
|
||||
* File: task1.c
|
||||
*
|
||||
* Language: C
|
||||
*
|
||||
* Hardware: STefi Light v1.1
|
||||
* Processor: STM32G431KBT6U
|
||||
*
|
||||
* Author: Manuel Lederhofer
|
||||
* Datum: 10.09.2021
|
||||
*
|
||||
* Version: 2.1
|
||||
* History:
|
||||
* 10.09.2021 ML create project
|
||||
* 09.03.2022 ML port from STM32F042K6T6 to STM32G431KBT6U
|
||||
* 18.02.2025 TK changed projectname to "C: GPIO)
|
||||
*
|
||||
* Status: under development
|
||||
*
|
||||
* Description:
|
||||
* Blinks the red LED of STefi Light, currently.
|
||||
* This file contains the main routine and the initialization.
|
||||
*
|
||||
* Notes:
|
||||
* - MCU speed at startup is 16 MHz
|
||||
*
|
||||
* Todo:
|
||||
* - Change the example code to match the description and requirements
|
||||
* of the requested application in the lab exercise guide.
|
||||
*
|
||||
************************************************************************************** */
|
||||
|
||||
/* ------------------------------------ INCLUDES -------------------------------------- */
|
||||
#include "stm32g431xx.h"
|
||||
#include "STefi-Light.h"
|
||||
|
||||
|
||||
/* ------------------------------------ DEFINES --------------------------------------- */
|
||||
#define LOOPS_PER_MS 1244 // NOP-loops for delay()
|
||||
#define WAITTIME 500
|
||||
|
||||
|
||||
/* ------------------------------------ TYPE DEFINITIONS ------------------------------ */
|
||||
/* ------------------------------------ GLOBAL VARIABLES ------------------------------ */
|
||||
int state = 0;
|
||||
/* ------------------------------------ PRIVATE VARIABLES ----------------------------- */
|
||||
|
||||
|
||||
/* ------------------------------------ PROTOTYPES ------------------------------------ */
|
||||
static void GPIO_init(void);
|
||||
static void delay(const uint16_t ms);
|
||||
static void blink(const unint numLED);
|
||||
|
||||
|
||||
/* ------------------------------------ M A I N --------------------------------------- */
|
||||
int main(void)
|
||||
{
|
||||
/* --- initialization --- */
|
||||
__disable_irq(); // disable interrupts globally
|
||||
|
||||
GPIO_init();
|
||||
|
||||
__enable_irq(); // enable interrupts globally
|
||||
|
||||
|
||||
/* --- one time tasks --- */
|
||||
|
||||
|
||||
/* --- infinite processing loop --- */
|
||||
while (1)
|
||||
{
|
||||
/* ... add your code to implement the lab assignment ... */
|
||||
|
||||
switch (state) {
|
||||
case 0:
|
||||
GPIOA->ODR &= ~(1 << 0); // LED0 on
|
||||
GPIOA->ODR &= ~(1 << 1);
|
||||
GPIOA->ODR &= ~(1 << 2);
|
||||
GPIOA->ODR &= ~(1 << 3);
|
||||
|
||||
state++;
|
||||
break;
|
||||
case 1:
|
||||
delay(WAITTIME); // wait
|
||||
state++;
|
||||
break;
|
||||
case 2:
|
||||
GPIOA->ODR |= (1 << 0); // LED0 off
|
||||
GPIOA->ODR |= (1 << 1);
|
||||
GPIOA->ODR |= (1 << 2);
|
||||
GPIOA->ODR |= (1 << 3);
|
||||
delay(WAITTIME); // wait
|
||||
state = 0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/* ------------------------------------ GLOBAL FUNCTIONS ------------------------------ */
|
||||
|
||||
|
||||
/* ------------------------------------ PRIVATE FUNCTIONS ----------------------------- */
|
||||
|
||||
/* ------------------------------------------------------------------------------------ *\
|
||||
* method: static void GPIO_init(void)
|
||||
*
|
||||
* Initializes GPIOs on STefi Light for pins with peripherals attached.
|
||||
*
|
||||
* requires: - nothing -
|
||||
* parameters: - none -
|
||||
* returns: - nothing -
|
||||
\* ------------------------------------------------------------------------------------ */
|
||||
static void GPIO_init(void)
|
||||
{
|
||||
/* enable port clocks */
|
||||
RCC->AHB2ENR |= RCC_AHB2ENR_GPIOAEN; // LEDs: A
|
||||
|
||||
|
||||
/* --- LEDs --- */
|
||||
GPIOA->ODR |= MASK_LED_ALL;
|
||||
GPIOA->MODER &= ~(3 << 0);
|
||||
GPIOA->MODER &= ~(3 << 2);
|
||||
GPIOA->MODER &= ~(3 << 4);
|
||||
GPIOA->MODER &= ~(3 << 6);
|
||||
GPIOA->MODER |= (1 << 0); // set LED pin to output
|
||||
GPIOA->MODER |= (1 << 2);
|
||||
GPIOA->MODER |= (1 << 4);
|
||||
GPIOA->MODER |= (1 << 6);
|
||||
}
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------------------ *\
|
||||
* method: static void delay(const uint16_t ms)
|
||||
*
|
||||
* Realizes a millisecond delay by very bad busy-wait.
|
||||
*
|
||||
* requires: - nothing -
|
||||
* parameters: ms - delay time in milliseconds
|
||||
* returns: - nothing -
|
||||
\* ------------------------------------------------------------------------------------ */
|
||||
static void delay(const uint16_t ms)
|
||||
{
|
||||
for (uint16_t i = 0; i < ms; ++i)
|
||||
{
|
||||
for (uint16_t j = 0; j < LOOPS_PER_MS; ++j)
|
||||
{
|
||||
__asm("NOP");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void blink(const uint numLED)
|
||||
{
|
||||
switch (state) {
|
||||
case 0:
|
||||
GPIOA->ODR &= ~(1 << numLED); // LED0 on
|
||||
state++;
|
||||
break;
|
||||
case 1:
|
||||
delay(WAITTIME); // wait
|
||||
state++;
|
||||
break;
|
||||
case 2:
|
||||
GPIOA->ODR |= (1 << numLED); // LED0 off
|
||||
delay(WAITTIME); // wait
|
||||
state = 0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
/* ************************************ E O F ***************************************** */
|
||||
@ -0,0 +1,202 @@
|
||||
/* ***************************************************************************************
|
||||
* Project: task1 - C:GPIO
|
||||
* File: task1.c
|
||||
*
|
||||
* Language: C
|
||||
*
|
||||
* Hardware: STefi Light v1.1
|
||||
* Processor: STM32G431KBT6U
|
||||
*
|
||||
* Author: Manuel Lederhofer
|
||||
* Datum: 10.09.2021
|
||||
*
|
||||
* Version: 2.1
|
||||
* History:
|
||||
* 10.09.2021 ML create project
|
||||
* 09.03.2022 ML port from STM32F042K6T6 to STM32G431KBT6U
|
||||
* 18.02.2025 TK changed projectname to "C: GPIO)
|
||||
*
|
||||
* Status: under development
|
||||
*
|
||||
* Description:
|
||||
* Blinks the red LED of STefi Light, currently.
|
||||
* This file contains the main routine and the initialization.
|
||||
*
|
||||
* Notes:
|
||||
* - MCU speed at startup is 16 MHz
|
||||
*
|
||||
* Todo:
|
||||
* - Change the example code to match the description and requirements
|
||||
* of the requested application in the lab exercise guide.
|
||||
*
|
||||
************************************************************************************** */
|
||||
|
||||
/* ------------------------------------ INCLUDES -------------------------------------- */
|
||||
#include "stm32g431xx.h"
|
||||
#include "STefi-Light.h"
|
||||
|
||||
|
||||
/* ------------------------------------ DEFINES --------------------------------------- */
|
||||
#define LOOPS_PER_MS 1244 // NOP-loops for delay()
|
||||
#define WAITTIME 500
|
||||
#define FIRST_LED 0
|
||||
#define LAST_LED 3
|
||||
#define UP 1
|
||||
#define DOWN -1
|
||||
|
||||
|
||||
/* ------------------------------------ TYPE DEFINITIONS ------------------------------ */
|
||||
/* ------------------------------------ GLOBAL VARIABLES ------------------------------ */
|
||||
int state = 0;
|
||||
/* ------------------------------------ PRIVATE VARIABLES ----------------------------- */
|
||||
|
||||
|
||||
/* ------------------------------------ PROTOTYPES ------------------------------------ */
|
||||
static void GPIO_init(void);
|
||||
static void delay(const uint16_t ms);
|
||||
static void blink(const unint numLED);
|
||||
|
||||
|
||||
/* ------------------------------------ M A I N --------------------------------------- */
|
||||
int main(void)
|
||||
{
|
||||
/* --- initialization --- */
|
||||
__disable_irq(); // disable interrupts globally
|
||||
|
||||
GPIO_init();
|
||||
|
||||
__enable_irq(); // enable interrupts globally
|
||||
|
||||
|
||||
/* --- one time tasks --- */
|
||||
|
||||
|
||||
/* --- infinite processing loop --- */
|
||||
while (1)
|
||||
{
|
||||
/* ... add your code to implement the lab assignment ... */
|
||||
int direction;
|
||||
int i = 0;
|
||||
while(1){
|
||||
if(i == FIRST_LED){
|
||||
direction = UP;
|
||||
}
|
||||
else if(i == LAST_LED){
|
||||
direction = DOWN;
|
||||
}
|
||||
blink(i);
|
||||
if(direction == UP){
|
||||
i++;
|
||||
}
|
||||
else if(direction == DOWN){
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
switch (state) {
|
||||
case 0:
|
||||
GPIOA->ODR &= ~(1 << 0); // LED0 on
|
||||
GPIOA->ODR &= ~(1 << 1);
|
||||
GPIOA->ODR &= ~(1 << 2);
|
||||
GPIOA->ODR &= ~(1 << 3);
|
||||
|
||||
state++;
|
||||
break;
|
||||
case 1:
|
||||
delay(WAITTIME); // wait
|
||||
state++;
|
||||
break;
|
||||
case 2:
|
||||
GPIOA->ODR |= (1 << 0); // LED0 off
|
||||
GPIOA->ODR |= (1 << 1);
|
||||
GPIOA->ODR |= (1 << 2);
|
||||
GPIOA->ODR |= (1 << 3);
|
||||
delay(WAITTIME); // wait
|
||||
state = 0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/* ------------------------------------ GLOBAL FUNCTIONS ------------------------------ */
|
||||
|
||||
|
||||
/* ------------------------------------ PRIVATE FUNCTIONS ----------------------------- */
|
||||
|
||||
/* ------------------------------------------------------------------------------------ *\
|
||||
* method: static void GPIO_init(void)
|
||||
*
|
||||
* Initializes GPIOs on STefi Light for pins with peripherals attached.
|
||||
*
|
||||
* requires: - nothing -
|
||||
* parameters: - none -
|
||||
* returns: - nothing -
|
||||
\* ------------------------------------------------------------------------------------ */
|
||||
static void GPIO_init(void)
|
||||
{
|
||||
/* enable port clocks */
|
||||
RCC->AHB2ENR |= RCC_AHB2ENR_GPIOAEN; // LEDs: A
|
||||
|
||||
|
||||
/* --- LEDs --- */
|
||||
GPIOA->ODR |= MASK_LED_ALL;
|
||||
GPIOA->MODER &= ~(3 << 0);
|
||||
GPIOA->MODER &= ~(3 << 2);
|
||||
GPIOA->MODER &= ~(3 << 4);
|
||||
GPIOA->MODER &= ~(3 << 6);
|
||||
GPIOA->MODER |= (1 << 0); // set LED pin to output
|
||||
GPIOA->MODER |= (1 << 2);
|
||||
GPIOA->MODER |= (1 << 4);
|
||||
GPIOA->MODER |= (1 << 6);
|
||||
}
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------------------ *\
|
||||
* method: static void delay(const uint16_t ms)
|
||||
*
|
||||
* Realizes a millisecond delay by very bad busy-wait.
|
||||
*
|
||||
* requires: - nothing -
|
||||
* parameters: ms - delay time in milliseconds
|
||||
* returns: - nothing -
|
||||
\* ------------------------------------------------------------------------------------ */
|
||||
static void delay(const uint16_t ms)
|
||||
{
|
||||
for (uint16_t i = 0; i < ms; ++i)
|
||||
{
|
||||
for (uint16_t j = 0; j < LOOPS_PER_MS; ++j)
|
||||
{
|
||||
__asm("NOP");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void blink(const uint numLED)
|
||||
{
|
||||
switch (state) {
|
||||
case 0:
|
||||
GPIOA->ODR &= ~(1 << numLED); // LED0 on
|
||||
state++;
|
||||
break;
|
||||
case 1:
|
||||
delay(WAITTIME); // wait
|
||||
state++;
|
||||
break;
|
||||
case 2:
|
||||
GPIOA->ODR |= (1 << numLED); // LED0 off
|
||||
delay(WAITTIME); // wait
|
||||
state = 0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
/* ************************************ E O F ***************************************** */
|
||||
@ -0,0 +1,200 @@
|
||||
/* ***************************************************************************************
|
||||
* Project: task1 - C:GPIO
|
||||
* File: task1.c
|
||||
*
|
||||
* Language: C
|
||||
*
|
||||
* Hardware: STefi Light v1.1
|
||||
* Processor: STM32G431KBT6U
|
||||
*
|
||||
* Author: Manuel Lederhofer
|
||||
* Datum: 10.09.2021
|
||||
*
|
||||
* Version: 2.1
|
||||
* History:
|
||||
* 10.09.2021 ML create project
|
||||
* 09.03.2022 ML port from STM32F042K6T6 to STM32G431KBT6U
|
||||
* 18.02.2025 TK changed projectname to "C: GPIO)
|
||||
*
|
||||
* Status: under development
|
||||
*
|
||||
* Description:
|
||||
* Blinks the red LED of STefi Light, currently.
|
||||
* This file contains the main routine and the initialization.
|
||||
*
|
||||
* Notes:
|
||||
* - MCU speed at startup is 16 MHz
|
||||
*
|
||||
* Todo:
|
||||
* - Change the example code to match the description and requirements
|
||||
* of the requested application in the lab exercise guide.
|
||||
*
|
||||
************************************************************************************** */
|
||||
|
||||
/* ------------------------------------ INCLUDES -------------------------------------- */
|
||||
#include "stm32g431xx.h"
|
||||
#include "STefi-Light.h"
|
||||
|
||||
|
||||
/* ------------------------------------ DEFINES --------------------------------------- */
|
||||
#define LOOPS_PER_MS 1244 // NOP-loops for delay()
|
||||
#define WAITTIME 500
|
||||
#define FIRST_LED 0
|
||||
#define LAST_LED 3
|
||||
|
||||
|
||||
/* ------------------------------------ TYPE DEFINITIONS ------------------------------ */
|
||||
/* ------------------------------------ GLOBAL VARIABLES ------------------------------ */
|
||||
int state = 0;
|
||||
/* ------------------------------------ PRIVATE VARIABLES ----------------------------- */
|
||||
|
||||
|
||||
/* ------------------------------------ PROTOTYPES ------------------------------------ */
|
||||
static void GPIO_init(void);
|
||||
static void delay(const uint16_t ms);
|
||||
static void blink(const unint numLED);
|
||||
|
||||
|
||||
/* ------------------------------------ M A I N --------------------------------------- */
|
||||
int main(void)
|
||||
{
|
||||
/* --- initialization --- */
|
||||
__disable_irq(); // disable interrupts globally
|
||||
|
||||
GPIO_init();
|
||||
|
||||
__enable_irq(); // enable interrupts globally
|
||||
|
||||
|
||||
/* --- one time tasks --- */
|
||||
|
||||
|
||||
/* --- infinite processing loop --- */
|
||||
while (1)
|
||||
{
|
||||
/* ... add your code to implement the lab assignment ... */
|
||||
int direction;
|
||||
int i = 0;
|
||||
while(1){
|
||||
if(i == FIRST_LED){
|
||||
direction = 1;
|
||||
}
|
||||
else if(i == LAST_LED){
|
||||
direction = -1;
|
||||
}
|
||||
blink(i);
|
||||
if(direction > 0){
|
||||
i++;
|
||||
}
|
||||
else if(direction < 0){
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
switch (state) {
|
||||
case 0:
|
||||
GPIOA->ODR &= ~(1 << 0); // LED0 on
|
||||
GPIOA->ODR &= ~(1 << 1);
|
||||
GPIOA->ODR &= ~(1 << 2);
|
||||
GPIOA->ODR &= ~(1 << 3);
|
||||
|
||||
state++;
|
||||
break;
|
||||
case 1:
|
||||
delay(WAITTIME); // wait
|
||||
state++;
|
||||
break;
|
||||
case 2:
|
||||
GPIOA->ODR |= (1 << 0); // LED0 off
|
||||
GPIOA->ODR |= (1 << 1);
|
||||
GPIOA->ODR |= (1 << 2);
|
||||
GPIOA->ODR |= (1 << 3);
|
||||
delay(WAITTIME); // wait
|
||||
state = 0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/* ------------------------------------ GLOBAL FUNCTIONS ------------------------------ */
|
||||
|
||||
|
||||
/* ------------------------------------ PRIVATE FUNCTIONS ----------------------------- */
|
||||
|
||||
/* ------------------------------------------------------------------------------------ *\
|
||||
* method: static void GPIO_init(void)
|
||||
*
|
||||
* Initializes GPIOs on STefi Light for pins with peripherals attached.
|
||||
*
|
||||
* requires: - nothing -
|
||||
* parameters: - none -
|
||||
* returns: - nothing -
|
||||
\* ------------------------------------------------------------------------------------ */
|
||||
static void GPIO_init(void)
|
||||
{
|
||||
/* enable port clocks */
|
||||
RCC->AHB2ENR |= RCC_AHB2ENR_GPIOAEN; // LEDs: A
|
||||
|
||||
|
||||
/* --- LEDs --- */
|
||||
GPIOA->ODR |= MASK_LED_ALL;
|
||||
GPIOA->MODER &= ~(3 << 0);
|
||||
GPIOA->MODER &= ~(3 << 2);
|
||||
GPIOA->MODER &= ~(3 << 4);
|
||||
GPIOA->MODER &= ~(3 << 6);
|
||||
GPIOA->MODER |= (1 << 0); // set LED pin to output
|
||||
GPIOA->MODER |= (1 << 2);
|
||||
GPIOA->MODER |= (1 << 4);
|
||||
GPIOA->MODER |= (1 << 6);
|
||||
}
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------------------ *\
|
||||
* method: static void delay(const uint16_t ms)
|
||||
*
|
||||
* Realizes a millisecond delay by very bad busy-wait.
|
||||
*
|
||||
* requires: - nothing -
|
||||
* parameters: ms - delay time in milliseconds
|
||||
* returns: - nothing -
|
||||
\* ------------------------------------------------------------------------------------ */
|
||||
static void delay(const uint16_t ms)
|
||||
{
|
||||
for (uint16_t i = 0; i < ms; ++i)
|
||||
{
|
||||
for (uint16_t j = 0; j < LOOPS_PER_MS; ++j)
|
||||
{
|
||||
__asm("NOP");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void blink(const uint numLED)
|
||||
{
|
||||
switch (state) {
|
||||
case 0:
|
||||
GPIOA->ODR &= ~(1 << numLED); // LED0 on
|
||||
state++;
|
||||
break;
|
||||
case 1:
|
||||
delay(WAITTIME); // wait
|
||||
state++;
|
||||
break;
|
||||
case 2:
|
||||
GPIOA->ODR |= (1 << numLED); // LED0 off
|
||||
delay(WAITTIME); // wait
|
||||
state = 0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
/* ************************************ E O F ***************************************** */
|
||||
@ -0,0 +1,205 @@
|
||||
/* ***************************************************************************************
|
||||
* Project: task1 - C:GPIO
|
||||
* File: task1.c
|
||||
*
|
||||
* Language: C
|
||||
*
|
||||
* Hardware: STefi Light v1.1
|
||||
* Processor: STM32G431KBT6U
|
||||
*
|
||||
* Author: Manuel Lederhofer
|
||||
* Datum: 10.09.2021
|
||||
*
|
||||
* Version: 2.1
|
||||
* History:
|
||||
* 10.09.2021 ML create project
|
||||
* 09.03.2022 ML port from STM32F042K6T6 to STM32G431KBT6U
|
||||
* 18.02.2025 TK changed projectname to "C: GPIO)
|
||||
*
|
||||
* Status: under development
|
||||
*
|
||||
* Description:
|
||||
* Blinks the red LED of STefi Light, currently.
|
||||
* This file contains the main routine and the initialization.
|
||||
*
|
||||
* Notes:
|
||||
* - MCU speed at startup is 16 MHz
|
||||
*
|
||||
* Todo:
|
||||
* - Change the example code to match the description and requirements
|
||||
* of the requested application in the lab exercise guide.
|
||||
*
|
||||
************************************************************************************** */
|
||||
|
||||
/* ------------------------------------ INCLUDES -------------------------------------- */
|
||||
#include "stm32g431xx.h"
|
||||
#include "STefi-Light.h"
|
||||
|
||||
|
||||
/* ------------------------------------ DEFINES --------------------------------------- */
|
||||
#define LOOPS_PER_MS 1244 // NOP-loops for delay()
|
||||
#define WAITTIME 500
|
||||
#define FIRST_LED 0
|
||||
#define LAST_LED 3
|
||||
#define UP 1
|
||||
#define DOWN -1
|
||||
|
||||
|
||||
/* ------------------------------------ TYPE DEFINITIONS ------------------------------ */
|
||||
/* ------------------------------------ GLOBAL VARIABLES ------------------------------ */
|
||||
int state = 0;
|
||||
/* ------------------------------------ PRIVATE VARIABLES ----------------------------- */
|
||||
|
||||
|
||||
/* ------------------------------------ PROTOTYPES ------------------------------------ */
|
||||
static void GPIO_init(void);
|
||||
static void delay(const uint16_t ms);
|
||||
static void blink(const unint numLED);
|
||||
|
||||
|
||||
/* ------------------------------------ M A I N --------------------------------------- */
|
||||
int main(void)
|
||||
{
|
||||
/* --- initialization --- */
|
||||
__disable_irq(); // disable interrupts globally
|
||||
|
||||
GPIO_init();
|
||||
|
||||
__enable_irq(); // enable interrupts globally
|
||||
|
||||
|
||||
/* --- one time tasks --- */
|
||||
|
||||
|
||||
/* --- infinite processing loop --- */
|
||||
|
||||
while (1)
|
||||
{
|
||||
/* ... add your code to implement the lab assignment ... */
|
||||
int direction;
|
||||
|
||||
while(1){
|
||||
if(i == FIRST_LED){
|
||||
direction = UP;
|
||||
}
|
||||
else if(i == LAST_LED){
|
||||
direction = DOWN;
|
||||
}
|
||||
|
||||
blink(i); //One full LED blink cylce
|
||||
|
||||
if(direction == UP){
|
||||
i++;
|
||||
}
|
||||
else if(direction == DOWN){
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
switch (state) {
|
||||
case 0:
|
||||
GPIOA->ODR &= ~(1 << 0); // LED0 on
|
||||
GPIOA->ODR &= ~(1 << 1);
|
||||
GPIOA->ODR &= ~(1 << 2);
|
||||
GPIOA->ODR &= ~(1 << 3);
|
||||
|
||||
state++;
|
||||
break;
|
||||
case 1:
|
||||
delay(WAITTIME); // wait
|
||||
state++;
|
||||
break;
|
||||
case 2:
|
||||
GPIOA->ODR |= (1 << 0); // LED0 off
|
||||
GPIOA->ODR |= (1 << 1);
|
||||
GPIOA->ODR |= (1 << 2);
|
||||
GPIOA->ODR |= (1 << 3);
|
||||
delay(WAITTIME); // wait
|
||||
state = 0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/* ------------------------------------ GLOBAL FUNCTIONS ------------------------------ */
|
||||
|
||||
|
||||
/* ------------------------------------ PRIVATE FUNCTIONS ----------------------------- */
|
||||
|
||||
/* ------------------------------------------------------------------------------------ *\
|
||||
* method: static void GPIO_init(void)
|
||||
*
|
||||
* Initializes GPIOs on STefi Light for pins with peripherals attached.
|
||||
*
|
||||
* requires: - nothing -
|
||||
* parameters: - none -
|
||||
* returns: - nothing -
|
||||
\* ------------------------------------------------------------------------------------ */
|
||||
static void GPIO_init(void)
|
||||
{
|
||||
/* enable port clocks */
|
||||
RCC->AHB2ENR |= RCC_AHB2ENR_GPIOAEN; // LEDs: A
|
||||
int i = FIRST_LED;
|
||||
|
||||
/* --- LEDs --- */
|
||||
GPIOA->ODR |= MASK_LED_ALL;
|
||||
GPIOA->MODER &= ~(3 << 0);
|
||||
GPIOA->MODER &= ~(3 << 2);
|
||||
GPIOA->MODER &= ~(3 << 4);
|
||||
GPIOA->MODER &= ~(3 << 6);
|
||||
GPIOA->MODER |= (1 << 0); // set LED pin to output
|
||||
GPIOA->MODER |= (1 << 2);
|
||||
GPIOA->MODER |= (1 << 4);
|
||||
GPIOA->MODER |= (1 << 6);
|
||||
}
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------------------ *\
|
||||
* method: static void delay(const uint16_t ms)
|
||||
*
|
||||
* Realizes a millisecond delay by very bad busy-wait.
|
||||
*
|
||||
* requires: - nothing -
|
||||
* parameters: ms - delay time in milliseconds
|
||||
* returns: - nothing -
|
||||
\* ------------------------------------------------------------------------------------ */
|
||||
static void delay(const uint16_t ms)
|
||||
{
|
||||
for (uint16_t i = 0; i < ms; ++i)
|
||||
{
|
||||
for (uint16_t j = 0; j < LOOPS_PER_MS; ++j)
|
||||
{
|
||||
__asm("NOP");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void blink(const uint numLED)
|
||||
{
|
||||
switch (state) {
|
||||
case 0:
|
||||
GPIOA->ODR &= ~(1 << numLED); // LEDX on
|
||||
state++;
|
||||
break;
|
||||
case 1:
|
||||
delay(WAITTIME); // wait
|
||||
state++;
|
||||
break;
|
||||
case 2:
|
||||
GPIOA->ODR |= (1 << numLED); // LEDX off
|
||||
delay(WAITTIME); // wait
|
||||
state = 0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
/* ************************************ E O F ***************************************** */
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
@ -39,6 +39,10 @@
|
||||
/* ------------------------------------ DEFINES --------------------------------------- */
|
||||
#define LOOPS_PER_MS 1244 // NOP-loops for delay()
|
||||
#define WAITTIME 500
|
||||
#define FIRST_LED 0
|
||||
#define LAST_LED 3
|
||||
#define UP 1
|
||||
#define DOWN -1
|
||||
|
||||
|
||||
/* ------------------------------------ TYPE DEFINITIONS ------------------------------ */
|
||||
@ -50,6 +54,7 @@ int state = 0;
|
||||
/* ------------------------------------ PROTOTYPES ------------------------------------ */
|
||||
static void GPIO_init(void);
|
||||
static void delay(const uint16_t ms);
|
||||
static void blink(const unint numLED);
|
||||
|
||||
|
||||
/* ------------------------------------ M A I N --------------------------------------- */
|
||||
@ -67,9 +72,31 @@ int main(void)
|
||||
|
||||
|
||||
/* --- infinite processing loop --- */
|
||||
|
||||
while (1)
|
||||
{
|
||||
/* ... add your code to implement the lab assignment ... */
|
||||
int direction;
|
||||
|
||||
while(1){
|
||||
if(i == FIRST_LED){
|
||||
direction = UP;
|
||||
}
|
||||
else if(i == LAST_LED){
|
||||
direction = DOWN;
|
||||
}
|
||||
|
||||
blink(i); //One full LED blink cylce
|
||||
|
||||
if(direction == UP){
|
||||
i++;
|
||||
}
|
||||
else if(direction == DOWN){
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
switch (state) {
|
||||
case 0:
|
||||
@ -119,7 +146,7 @@ static void GPIO_init(void)
|
||||
{
|
||||
/* enable port clocks */
|
||||
RCC->AHB2ENR |= RCC_AHB2ENR_GPIOAEN; // LEDs: A
|
||||
|
||||
int i = FIRST_LED;
|
||||
|
||||
/* --- LEDs --- */
|
||||
GPIOA->ODR |= MASK_LED_ALL;
|
||||
@ -154,5 +181,25 @@ static void delay(const uint16_t ms)
|
||||
}
|
||||
}
|
||||
|
||||
static void blink(const uint numLED)
|
||||
{
|
||||
switch (state) {
|
||||
case 0:
|
||||
GPIOA->ODR &= ~(1 << numLED); // LEDX on
|
||||
state++;
|
||||
break;
|
||||
case 1:
|
||||
delay(WAITTIME); // wait
|
||||
state++;
|
||||
break;
|
||||
case 2:
|
||||
GPIOA->ODR |= (1 << numLED); // LEDX off
|
||||
delay(WAITTIME); // wait
|
||||
state = default;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
/* ************************************ E O F ***************************************** */
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user