Updates along with SDK1.3.0 release (#181)
Bug fixes and new examples Co-authored-by: Paulo Marques <pm@quant-insight.com> Co-authored-by: martin <admin@crossleys.biz> Co-authored-by: matiasilva <matias.silva@raspberrypi.com> Co-authored-by: Uri Shaked <uri@urishaked.com> Co-authored-by: Diego Solano <diegosolano@gmail.com> Co-authored-by: Andrew Scheller <andrew.scheller@raspberrypi.com> Co-authored-by: Adrian Hesketh <a-h@users.noreply.github.com> Co-authored-by: Emircan Gündoğdu <58917386+emircangun@users.noreply.github.com> Co-authored-by: Josef Wegner <80200012+josefwegner@users.noreply.github.com> Co-authored-by: pmarques-dev <72901351+pmarques-dev@users.noreply.github.com> Co-authored-by: Paulo Marques <pm@quant-insight.com> Co-authored-by: mjcross <mjcross@users.noreply.github.com> Co-authored-by: martin <admin@crossleys.biz>
This commit is contained in:
78
pio/ir_nec/nec_transmit_library/nec_transmit.c
Normal file
78
pio/ir_nec/nec_transmit_library/nec_transmit.c
Normal file
@@ -0,0 +1,78 @@
|
||||
/**
|
||||
* Copyright (c) 2021 mjcross
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
|
||||
// SDK types and declarations
|
||||
//
|
||||
#include "pico/stdlib.h"
|
||||
#include "hardware/pio.h"
|
||||
#include "hardware/clocks.h" // for clock_get_hz()
|
||||
#include "nec_transmit.h"
|
||||
|
||||
// import the assembled PIO state machine programs
|
||||
#include "nec_carrier_burst.pio.h"
|
||||
#include "nec_carrier_control.pio.h"
|
||||
|
||||
// Claim an unused state machine on the specified PIO and configure it
|
||||
// to transmit NEC IR frames on the specificied GPIO pin.
|
||||
//
|
||||
// Returns: on success, the number of the carrier_control state machine
|
||||
// otherwise -1
|
||||
int nec_tx_init(PIO pio, uint pin_num) {
|
||||
|
||||
// install the carrier_burst program in the PIO shared instruction space
|
||||
uint carrier_burst_offset;
|
||||
if (pio_can_add_program(pio, &nec_carrier_burst_program)) {
|
||||
carrier_burst_offset = pio_add_program(pio, &nec_carrier_burst_program);
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
|
||||
// claim an unused state machine on this PIO
|
||||
int carrier_burst_sm = pio_claim_unused_sm(pio, true);
|
||||
if (carrier_burst_sm == -1) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
// configure and enable the state machine
|
||||
nec_carrier_burst_program_init(pio,
|
||||
carrier_burst_sm,
|
||||
carrier_burst_offset,
|
||||
pin_num,
|
||||
38.222e3); // 38.222 kHz carrier
|
||||
|
||||
// install the carrier_control program in the PIO shared instruction space
|
||||
uint carrier_control_offset;
|
||||
if (pio_can_add_program(pio, &nec_carrier_control_program)) {
|
||||
carrier_control_offset = pio_add_program(pio, &nec_carrier_control_program);
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
|
||||
// claim an unused state machine on this PIO
|
||||
int carrier_control_sm = pio_claim_unused_sm(pio, true);
|
||||
if (carrier_control_sm == -1) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
// configure and enable the state machine
|
||||
nec_carrier_control_program_init(pio,
|
||||
carrier_control_sm,
|
||||
carrier_control_offset,
|
||||
2 * (1 / 562.5e-6f), // 2 ticks per 562.5us carrier burst
|
||||
32); // 32 bits per frame
|
||||
|
||||
return carrier_control_sm;
|
||||
}
|
||||
|
||||
|
||||
// Create a frame in `NEC` format from the provided 8-bit address and data
|
||||
//
|
||||
// Returns: a 32-bit encoded frame
|
||||
uint32_t nec_encode_frame(uint8_t address, uint8_t data) {
|
||||
// a normal 32-bit frame is encoded as address, inverted address, data, inverse data,
|
||||
return address | (address ^ 0xff) << 8 | data << 16 | (data ^ 0xff) << 24;
|
||||
}
|
||||
Reference in New Issue
Block a user