[feat] add rmii and dma demo
This commit is contained in:
parent
4af07de63d
commit
40c7bf6258
98
main.c
98
main.c
@ -3,9 +3,19 @@
|
||||
#include "clock.h"
|
||||
#include "sio.h"
|
||||
#include "gpio.h"
|
||||
#include "dma.h"
|
||||
#include "pio_rmii_tx.h"
|
||||
#include "RP2040.h"
|
||||
#include "main_core0.h"
|
||||
#include "main_core1.h"
|
||||
#include "udp.h"
|
||||
|
||||
#define STR_MAC_SRC "11:22:33:44:55:66"
|
||||
#define STR_MAC_DST "1C:1B:0D:2E:A9:99"
|
||||
#define STR_IP_SRC "192.168.2.219"
|
||||
#define STR_IP_DST "192.168.2.24"
|
||||
#define STR_PORT_SRC "40103"
|
||||
#define STR_PORT_DST "40103"
|
||||
|
||||
struct gpio_cfg_s gpio_led_cfg = {
|
||||
.pin = 25,
|
||||
@ -66,20 +76,96 @@ void main_core1(void)
|
||||
|
||||
extern uint32_t _vector;
|
||||
extern uint32_t _stack_top_core1;
|
||||
|
||||
struct pio_rmii_tx_s rmii = {
|
||||
.clkdiv = 2,
|
||||
.sm = 0,
|
||||
.addr = 0,
|
||||
.flag = 0,
|
||||
.pin = 12, /* increase order of pin CLK-EN-D0-D1 */
|
||||
};
|
||||
|
||||
struct udp_cfg_s udp_cfg = {
|
||||
.mac_src = STR_MAC_SRC,
|
||||
.mac_dst = STR_MAC_DST,
|
||||
.ip_src = STR_IP_SRC,
|
||||
.ip_dst = STR_IP_DST,
|
||||
.port_src = STR_PORT_SRC,
|
||||
.port_dst = STR_PORT_DST,
|
||||
};
|
||||
|
||||
struct udp_header_s udp_default;
|
||||
uint32_t buffer[512];
|
||||
uint32_t *data;
|
||||
uint16_t length;
|
||||
|
||||
uint8_t dma_buffer_raw[] = { 0x55, 0xD5, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE };
|
||||
uint8_t dma_buffer_calc[20];
|
||||
struct dma_cfg_s dma_cfg = {
|
||||
.read_addr = (uint32_t)dma_buffer_raw,
|
||||
.write_addr = (uint32_t)dma_buffer_calc,
|
||||
.trans_count = sizeof(dma_buffer_raw) / 4,
|
||||
.channel = DMA_CHANNEL_0,
|
||||
.request = DMA_REQ_FOREVER,
|
||||
.data_size = DMA_DATA_SIZE_32BIT,
|
||||
.incr_read = ENABLE,
|
||||
.incr_write = ENABLE,
|
||||
.irq_quiet = DISABLE,
|
||||
.byte_swap = DISABLE,
|
||||
.chain_to = DMA_CHANNEL_0,
|
||||
.high_priority = DISABLE,
|
||||
.ring_sel_write = DISABLE,
|
||||
.ring_size = DMA_RING_SIZE_NONE,
|
||||
.sniff_en = ENABLE,
|
||||
};
|
||||
struct dma_sniff_cfg_s sniff_cfg = {
|
||||
.channel = DMA_CHANNEL_0,
|
||||
.calc = DMA_SNIFF_CALC_CRC32_BITREV,
|
||||
.byte_swap = DISABLE,
|
||||
.out_rev = ENABLE,
|
||||
.out_inv = ENABLE,
|
||||
};
|
||||
|
||||
int main(void)
|
||||
{
|
||||
reset_disable(RESET_IO_BANK0 | RESET_PADS_BANK0);
|
||||
reset_disable(RESET_PIO0);
|
||||
gpio_init(&gpio_led_cfg);
|
||||
gpio_init_simple(rmii.pin, GPIO_FUNC_PIO0, DISABLE, DISABLE);
|
||||
gpio_init_simple(rmii.pin + 1, GPIO_FUNC_PIO0, DISABLE, DISABLE);
|
||||
gpio_init_simple(rmii.pin + 2, GPIO_FUNC_PIO0, DISABLE, DISABLE);
|
||||
gpio_init_simple(rmii.pin + 3, GPIO_FUNC_PIO0, DISABLE, DISABLE);
|
||||
if (udp_create_default(&udp_cfg, &udp_default)) {
|
||||
while (1);
|
||||
}
|
||||
data = udp_copy_header(buffer, &udp_default);
|
||||
for (uint32_t i = 0; i < 16; i++) {
|
||||
data[i] = (i << 24) | (i << 16) | (i << 8) | i;
|
||||
}
|
||||
length = udp_pack_data((struct udp_header_s *)buffer, 16);
|
||||
|
||||
system_reset(SYSTEM_BLOCK_PROC1);
|
||||
sio_launch_core1(main_core1,&_stack_top_core1, _vector);
|
||||
// system_reset(SYSTEM_BLOCK_PROC1);
|
||||
// sio_launch_core1(main_core1, &_stack_top_core1, _vector);
|
||||
|
||||
dma_int_clear_raw_status(1 << DMA_CHANNEL_0);
|
||||
dma_init(&dma_cfg);
|
||||
dma_sniff_init(&sniff_cfg);
|
||||
dma_sniff_write(0xA3123859);
|
||||
dma_sniff_enable();
|
||||
dma_enable_and_trig(dma_cfg.channel);
|
||||
while (!(dma_int_get_raw_status() & (1 << dma_cfg.channel)));
|
||||
|
||||
__enable_irq();
|
||||
|
||||
pio_rmii_tx_init(&rmii);
|
||||
while (1) {
|
||||
static uint32_t tick_cnt = 0;
|
||||
if (tick_1ms > (tick_cnt + 200)) {
|
||||
tick_cnt = tick_1ms;
|
||||
static uint32_t tick_led = 0;
|
||||
static uint32_t tick_rmii = 0;
|
||||
if (tick_1ms > (tick_rmii + 1)) {
|
||||
tick_rmii = tick_1ms;
|
||||
pio_rmii_write(&rmii, (uint32_t *)buffer, length);
|
||||
}
|
||||
if (tick_1ms > (tick_led + 500)) {
|
||||
tick_led = tick_1ms;
|
||||
gpio_toggle(gpio_led_cfg.pin);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user