Soy completamente nuevo en los microcontroladores Atmel ARM y más allá de una sola clase hace un par de años y algunos retoques de arduino, nuevos en el mcu "apropiado" en general.
Por lo tanto, estoy teniendo problemas con las tareas más simples, es decir, crear un simple programa de parpadeo de LED y programarlo en el chip.
El MCU es un ATSAM3X8E, montado en un arduino debido (pero no estoy usando ningún software arduino, estoy tratando de tratarlo como un simple panel de ruptura para el MCU).
Estoy usando un proyecto de ejemplo que viene con Atmel studio 7 llamado clock_example11 (que aparentemente está hecho para el arduino debido a que la configuración de la placa debería estar bien?) excepto que solo intenté modificar el LED parpadeante en el pin 14 del puerto B . Se construye aparentemente bien.
Entonces intenté programarlo por USB, usando el software SAM-BA 2.15. Comienzo el programa, me conecto al chip con éxito (con el preajuste de la placa "at91sam3x8-ek"), selecciono el archivo .bin incorporado como el nombre del archivo de envío en la pestaña flash y lo envío a la dirección 0x80000, que si entiendo es el inicio del flash y es desde donde se inicia el chip si configuro el arranque desde el bit de flash. Luego envío el archivo y, cuando intento comparar la memoria con el archivo enviado, coincide, de modo que el flash se programó correctamente, parece. Luego ejecuto el script "boot from flash" e incluso "select flash0 for boot" por si acaso.
Pero, no pasa nada. El LED no parpadea. Y no sé a dónde ir desde aquí. No sé cuáles de los pasos que hice, si no todos, están equivocados. ¿Alguien me puede dar algunos consejos? Aquí está el archivo fuente principal:
#include "asf.h"
/* Global ul_ms_ticks in milliseconds since start of application */
volatile uint32_t ul_ms_ticks = 0;
/**
* \brief Wait for the given number of milliseconds (using the ul_ms_ticks generated
* by the SAM microcontroller system tick).
*
* \param ul_dly_ticks Delay to wait for, in milliseconds.
*/
static void mdelay(uint32_t ul_dly_ticks)
{
uint32_t ul_cur_ticks;
ul_cur_ticks = ul_ms_ticks;
while ((ul_ms_ticks - ul_cur_ticks) < ul_dly_ticks) {
}
}
/**
* \brief Handler for System Tick interrupt.
*
* Process System Tick Event and increments the ul_ms_ticks counter.
*/
void SysTick_Handler(void)
{
ul_ms_ticks++;
}
/**
* \brief Initialize the clock system and blink a LED at a constant 1 Hz frequency.
*
* \return Unused (ANSI-C compatibility).
*/
int main(void)
{
sysclk_init();
board_init();
/* Setup SysTick Timer for 1 msec interrupts */
if (SysTick_Config(sysclk_get_cpu_hz() / 1000)) {
while (1) { /* Capture error */
}
}
while (1) {
ioport_toggle_pin_level(IOPORT_CREATE_PIN(PIOA,14));
mdelay(500);
}
}
EDITAR: Creo que mi código fue el problema, porque ahora pude programar el chip. Para el registro, modifiqué la función principal a esto: enlace