You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
1.5 KiB
C++
87 lines
1.5 KiB
C++
#include "epenguin.hpp"
|
|
#include "hal_sam_d2x.hpp"
|
|
#include <inttypes.h>
|
|
|
|
|
|
#define PORT_ADDR (0x41004400)
|
|
|
|
#define PORT_GROUP_SIZE (0x80)
|
|
|
|
#define PORT_A_OFF (0x00)
|
|
#define PORT_B_OFF (0x80)
|
|
|
|
#define PORT_DIR_OFF (0x00)
|
|
#define PORT_OUT_OFF (0x10)
|
|
|
|
// LED 0: PA09
|
|
// LED 1: PB01
|
|
|
|
#define LED0_PORT (0)
|
|
#define LED0_PIN (9)
|
|
|
|
#define LED1_PORT (1)
|
|
#define LED1_PIN (1)
|
|
|
|
static void init_pin(int port, int pin);
|
|
static void set_pin(int port, int pin);
|
|
static void clr_pin(int port, int pin);
|
|
|
|
static void delay(int n)
|
|
{
|
|
int i;
|
|
|
|
for(;n>0;n--)
|
|
{
|
|
for(i=0;i<100;i++)
|
|
{
|
|
|
|
asm volatile("nop");
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
int main()
|
|
{
|
|
init_pin(LED0_PORT, LED0_PIN);
|
|
init_pin(LED1_PORT, LED1_PIN);
|
|
for(;;)
|
|
{
|
|
set_pin(LED0_PORT, LED0_PIN);
|
|
clr_pin(LED1_PORT, LED1_PIN);
|
|
delay(500);
|
|
clr_pin(LED0_PORT, LED0_PIN);
|
|
set_pin(LED1_PORT, LED1_PIN);
|
|
delay(500);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
// port 0: A
|
|
// port 1: B
|
|
|
|
|
|
void init_pin(int port, int pin)
|
|
{
|
|
uint32_t* dir_reg = (uint32_t*)((PORT_ADDR | (port * PORT_GROUP_SIZE) | PORT_DIR_OFF));
|
|
*dir_reg |= (1 << pin);
|
|
}
|
|
|
|
void set_pin(int port, int pin)
|
|
{
|
|
uint32_t* out_reg = (uint32_t*)((PORT_ADDR | (port * PORT_GROUP_SIZE) | PORT_OUT_OFF));
|
|
*out_reg |= (1 << pin);
|
|
}
|
|
|
|
void clr_pin(int port, int pin)
|
|
{
|
|
uint32_t* out_reg = (uint32_t*)((PORT_ADDR | (port * PORT_GROUP_SIZE) | PORT_OUT_OFF));
|
|
*out_reg &= ~(1 << pin);
|
|
}
|
|
|
|
|
|
|
|
|
|
|