#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include "pico/stdlib.h"
#include "hardware/dma.h"
#define MAX_LEN 100
char src[MAX_LEN]; // Buffer de entrada
char dst[MAX_LEN]; // Buffer de destino
int main() {
stdio_init_all();
sleep_ms(2000); // Aguarda o terminal iniciar
int contador_transferencias = 0; // Contador de transferências via DMA
while (true) {
// Limpa os buffers
memset(src, 0, sizeof(src));
memset(dst, 0, sizeof(dst));
printf("Digite uma palavra (até 99 caracteres) ou 'sair':\n");
sleep_ms(1000); // Espera antes da leitura
scanf("%99s", src); // Lê a entrada do usuário
// Permite encerrar o programa
if (strcmp(src, "sair") == 0) {
printf("Encerrando o programa. Total de transferências: %d\n", contador_transferencias);
break;
}
int len = strlen(src) + 1; // Calcula o tamanho da palavra (com \0)
if (len > MAX_LEN) {
printf("Erro: Palavra excede o tamanho máximo permitido.\n\n");
continue;
}
// Requisição de canal DMA
int chan = dma_claim_unused_channel(true);
// Configuração do canal
dma_channel_config cfg = dma_channel_get_default_config(chan);
channel_config_set_transfer_data_size(&cfg, DMA_SIZE_8);
channel_config_set_read_increment(&cfg, true);
channel_config_set_write_increment(&cfg, true);
// Transferência DMA
dma_channel_configure(
chan, &cfg,
dst, src,
len,
true
);
dma_channel_wait_for_finish_blocking(chan);
dma_channel_unclaim(chan); // Libera o canal
contador_transferencias++; // Atualiza contador
// Exibe resultados
printf("\nPalavra transferida via DMA com sucesso!\n");
printf("Origem (src): %s\n", src);
printf("Destino (dst): %s\n", dst);
printf("Transferências realizadas: %d\n\n", contador_transferencias);
}
return 0;
}