Compare commits

...

2 commits

Author SHA1 Message Date
Stephan I. Böttcher
a75d940be5 new command gpio1 2024-11-08 22:46:39 +01:00
Stephan I. Böttcher
a1ea3d45d5 ssp: minor fix 2024-11-08 22:34:22 +01:00
4 changed files with 60 additions and 22 deletions

51
gpio.c
View file

@ -2,23 +2,40 @@
#include "gpio.h" #include "gpio.h"
#include <lpc2148/gpio.h> #include <lpc2148/gpio.h>
unsigned int gpio1_mask = 0x00ff0000; unsigned int gpio1_status;
void gpio_set(unsigned int pins) int gpio1_cmd(struct command *cmd, const struct command_par *par)
{ {
pins &= gpio1_mask; static const struct keywords gpio_kw[] = {
GPIO_FIO1SET = pins; FLAG_VAL("dir", 0x020+2), // GPIO_FIO1DIR2
GPIO_FIO1DIR |= pins; FLAG_VAL("mask", 0x030+2), // GPIO_FIO1MASK2
} FLAG_VAL("pin", 0x034+2), // GPIO_FIO1PIN2
void gpio_clr(unsigned int pins) FLAG_VAL("set", 0x038+2), // GPIO_FIO1SET2
{ FLAG_VAL("clr", 0x03C+2), // GPIO_FIO1CLR2
pins &= gpio1_mask; {}
GPIO_FIO1CLR = pins; };
GPIO_FIO1DIR |= pins;
} // syntax example: gpio mask[0xf] dir[0xc] p[0x8] c[0x8]
unsigned int gpio_read(unsigned int pins) // square brackets are optional where unambiguous
{
pins &= gpio1_mask; const struct keywords *k = parse_keyword(cmd, gpio_kw);
GPIO_FIO1DIR &=~ pins; error_msg_t e = 0;
return GPIO_FIO1PIN & pins; while (k) {
if (!k->val)
e = &parser_keyword_error;
unsigned int val;
if (!e)
e = parse_expression_square(cmd, &val, 2);
if (e)
return parser_error_message(cmd, e);
BYTE_REG(BASE_FGPIO, k->val) = val;
k = parse_keyword(cmd, gpio_kw);
}
gpio1_status = GPIO_FIO1MASK2 << 24
| GPIO_FIO1DIR2 << 16
| GPIO_FIO1PINU
;
parser_format_message(cmd, "%03d GPIO1 0x%08x\n",
par->code, gpio1_status);
return par->code;
} }

26
gpio.h
View file

@ -91,6 +91,7 @@
*/ */
#include <lpc2148/gpio.h> #include <lpc2148/gpio.h>
#include "parser.h"
static inline void init_gpio(void) {} static inline void init_gpio(void) {}
@ -100,9 +101,26 @@ static inline void init_gpio(void) {}
#define SSP_SSEL_CONF1 0x03ee0000 // ssel bits associated with gpio1 pins #define SSP_SSEL_CONF1 0x03ee0000 // ssel bits associated with gpio1 pins
#define SSP_MISO (GPIO_FIO0PIN2 & 4) #define SSP_MISO (GPIO_FIO0PIN2 & 4)
extern unsigned int gpio1_mask; static inline
void gpio_set(unsigned int pins); void gpio_set(unsigned char pins)
void gpio_clr(unsigned int pins); {
unsigned int gpio_read(unsigned int pins); GPIO_FIO1SET2 = pins;
GPIO_FIO1DIR2 |= pins;
}
static inline
void gpio_clr(unsigned char pins)
{
GPIO_FIO1CLR2 = pins;
GPIO_FIO1DIR2 |= pins;
}
static inline
unsigned char gpio_read(unsigned char pins)
{
GPIO_FIO1DIR2 &=~ pins;
return GPIO_FIO1PIN2 & pins;
}
int gpio1_cmd(struct command *cmd, const struct command_par *par);
extern unsigned int gpio1_status;
#endif #endif

View file

@ -520,6 +520,7 @@ static const struct keywords main_command_table[] = {
CMD_KW("pressure", pressure_cmd, 366, 0), CMD_KW("pressure", pressure_cmd, 366, 0),
CMD_KW("bate", bate_cmd, 368, 0), CMD_KW("bate", bate_cmd, 368, 0),
CMD_KW("dac", dac_cmd, 364, 0), CMD_KW("dac", dac_cmd, 364, 0),
CMD_KW("gpio1", gpio1_cmd, 362, 0),
CMD_KW("adc", parse_sub_command, 909, adc_commands), CMD_KW("adc", parse_sub_command, 909, adc_commands),
CMD_KW("ssp", parse_sub_command, 909, ssp_commands), CMD_KW("ssp", parse_sub_command, 909, ssp_commands),
{"flash", {.par=&flash_command}}, {"flash", {.par=&flash_command}},
@ -841,6 +842,8 @@ static const struct keywords main_variable_names[] = {
VARIABLE("adc_Vp", (unsigned int *)&AD_Vp ), VARIABLE("adc_Vp", (unsigned int *)&AD_Vp ),
VARIABLE("adc_Vm", (unsigned int *)&AD_Vm ), VARIABLE("adc_Vm", (unsigned int *)&AD_Vm ),
VARIABLE("gpio1", &gpio1_status),
VARIABLE("revision", &revision), VARIABLE("revision", &revision),
VARIABLE("serial_number", &serial_number), VARIABLE("serial_number", &serial_number),
VARIABLE("product", &product), VARIABLE("product", &product),

2
ssp.c
View file

@ -684,7 +684,7 @@ int ssp_resp_cmd(struct command *cmd, const struct command_par *par)
printf(0, "\n"); printf(0, "\n");
} }
parser_format_message(cmd, fmt, par->code, nreads, parser_format_message(cmd, fmt, code, nreads,
ssp_buffer[0], ssp_buffer[1], ssp_buffer[2], ssp_buffer[3], ssp_buffer[0], ssp_buffer[1], ssp_buffer[2], ssp_buffer[3],
ssp_buffer[4], ssp_buffer[5], ssp_buffer[6], ssp_buffer[7]); ssp_buffer[4], ssp_buffer[5], ssp_buffer[6], ssp_buffer[7]);
return code; return code;