sipo finished
This commit is contained in:
@@ -30,7 +30,7 @@ static void send_pulse(bool pol, GPIO_TypeDef *port, uint32_t ll)
|
||||
|
||||
#pragma GCC push_options
|
||||
#pragma GCC optimize ("O2")
|
||||
error_t UU_SIPO_Write(Unit *unit, const uint8_t *buffer, uint16_t buflen)
|
||||
error_t UU_SIPO_Write(Unit *unit, const uint8_t *buffer, uint16_t buflen, uint16_t terminal_data)
|
||||
{
|
||||
CHECK_TYPE(unit, &UNIT_SIPO);
|
||||
struct priv *priv = unit->data;
|
||||
@@ -65,6 +65,11 @@ error_t UU_SIPO_Write(Unit *unit, const uint8_t *buffer, uint16_t buflen)
|
||||
}
|
||||
}
|
||||
|
||||
// load the final data - this may be used by some other circuitry or
|
||||
// simply to rest the lines at a defined known level
|
||||
uint16_t spread = pinmask_spread(terminal_data, mask);
|
||||
priv->data_port->BSRR = spread | (((~spread) & mask) << 16);
|
||||
|
||||
send_pulse(priv->store_pol, priv->store_port, priv->store_ll);
|
||||
return E_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -79,9 +79,10 @@ void USIPO_deInit(Unit *unit);
|
||||
* @param unit
|
||||
* @param buffer - buffer of data to send
|
||||
* @param buflen - number of bytes in the buffer
|
||||
* @param terminal_data - data to set before sending the store pulse (final data lines state, will not appear in the SIPOs)
|
||||
* @return success
|
||||
*/
|
||||
error_t UU_SIPO_Write(Unit *unit, const uint8_t *buffer, uint16_t buflen);
|
||||
error_t UU_SIPO_Write(Unit *unit, const uint8_t *buffer, uint16_t buflen, uint16_t terminal_data);
|
||||
|
||||
/**
|
||||
* Direct access to the output data pins (may be useful for debugging, or circuits that use them
|
||||
|
||||
@@ -103,11 +103,11 @@ void USIPO_writeIni(Unit *unit, IniWriter *iw)
|
||||
{
|
||||
struct priv *priv = unit->data;
|
||||
|
||||
iw_comment(iw, "Shift pin & its active edge");
|
||||
iw_comment(iw, "Shift pin & its active edge (1-rising,0-falling)");
|
||||
iw_entry(iw, "shift-pin", "%c%d", priv->shift_pname, priv->shift_pnum);
|
||||
iw_entry(iw, "shift-pol", "%d", priv->shift_pol);
|
||||
|
||||
iw_comment(iw, "Store pin & its active edge (1-rising,0-falling)");
|
||||
iw_comment(iw, "Store pin & its active edge");
|
||||
iw_entry(iw, "store-pin", "%c%d", priv->store_pname, priv->store_pnum);
|
||||
iw_entry(iw, "store-pol", "%d", priv->store_pol);
|
||||
|
||||
|
||||
@@ -26,8 +26,9 @@ static error_t USIPO_handleRequest(Unit *unit, TF_ID frame_id, uint8_t command,
|
||||
case CMD_WRITE:
|
||||
{
|
||||
uint32_t len;
|
||||
uint16_t terminal_packed = pp_u16(pp);
|
||||
const uint8_t *tail = pp_tail(pp, &len);
|
||||
TRY(UU_SIPO_Write(unit, (uint8_t *) tail, (uint16_t) len));
|
||||
TRY(UU_SIPO_Write(unit, (uint8_t *) tail, (uint16_t) len, terminal_packed));
|
||||
}
|
||||
return E_SUCCESS;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user