mirror of
https://github.com/esp8266/Arduino.git
synced 2025-07-30 16:24:09 +03:00
[sam] UART/USART write(char) working and cmsis update
This commit is contained in:
@ -74,7 +74,7 @@ C_SRC=$(wildcard $(PROJECT_BASE_PATH)/*.c)
|
||||
C_OBJ_TEMP = $(patsubst %.c, %.o, $(notdir $(C_SRC)))
|
||||
|
||||
# during development, remove some files
|
||||
C_OBJ_FILTER=wiring_analog.o wiring_pulse.o
|
||||
C_OBJ_FILTER=
|
||||
|
||||
C_OBJ=$(filter-out $(C_OBJ_FILTER), $(C_OBJ_TEMP))
|
||||
|
||||
@ -87,7 +87,7 @@ CPP_SRC+=$(wildcard $(VARIANT_COMMON_PATH)/*.cpp)
|
||||
CPP_OBJ_TEMP = $(patsubst %.cpp, %.o, $(notdir $(CPP_SRC)))
|
||||
|
||||
# during development, remove some files
|
||||
CPP_OBJ_FILTER=Tone.o
|
||||
CPP_OBJ_FILTER=
|
||||
|
||||
CPP_OBJ=$(filter-out $(CPP_OBJ_FILTER), $(CPP_OBJ_TEMP))
|
||||
|
||||
|
@ -19,38 +19,38 @@ extern const PinDescription g_APinDescription[]=
|
||||
{ PIOA, PIO_PA12A_UTXD, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT }, // UTXD
|
||||
{ PIOA, PIO_PA11A_URXD|PIO_PA12A_UTXD, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT }, // All UART pins
|
||||
|
||||
// USART0 (Serial2), 3..5
|
||||
// USART0 (Serial2), 6..8
|
||||
{ PIOA, PIO_PA19A_RXD0, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT }, // RXD0
|
||||
{ PIOA, PIO_PA18A_TXD0, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT }, // TXD0
|
||||
{ PIOA, PIO_PA19A_RXD0|PIO_PA18A_TXD0, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT }, // All USART0 pins
|
||||
|
||||
// USART1 (Serial3), 6..8
|
||||
// USART1 (Serial3), 9..11
|
||||
{ PIOA, PIO_PA21A_RXD1, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT }, // RXD1
|
||||
{ PIOA, PIO_PA20A_TXD1, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT }, // TXD1
|
||||
{ PIOA, PIO_PA21A_RXD1|PIO_PA20A_TXD1, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT }, // All USART1 pins
|
||||
|
||||
// USART2 (Serial4), 9..11
|
||||
// USART2 (Serial4), 12..14
|
||||
{ PIOA, PIO_PA23A_RXD2, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT }, // RXD2
|
||||
{ PIOA, PIO_PA22A_TXD2, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT }, // TXD2
|
||||
{ PIOA, PIO_PA23A_RXD2|PIO_PA22A_TXD2, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT }, // All USART2 pins
|
||||
|
||||
// SPI, 12..15
|
||||
// SPI, 15..18
|
||||
{ PIOA, PIO_PA13A_MISO, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT }, // MISO
|
||||
{ PIOA, PIO_PA14A_MOSI, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT }, // MOSI
|
||||
{ PIOA, PIO_PA15A_SPCK, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT }, // SPCK
|
||||
{ PIOC, PIO_PA16A_NPCS0, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT }, // NPCS0
|
||||
|
||||
// TWI0, 16..18
|
||||
// TWI0, 19..21
|
||||
{ PIOA, PIO_PA9A_TWD0, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT }, // TWD0 - SDA1
|
||||
{ PIOA, PIO_PA10A_TWCK0, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT }, // TWCK0 - SCL1
|
||||
{ PIOA, PIO_PA9A_TWD0|PIO_PA10A_TWCK0, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT }, // All TWI0 pins
|
||||
|
||||
// TWI1, 19..21
|
||||
// TWI1, 22..24
|
||||
{ PIOA, PIO_PA24A_TWD1, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT }, // TWD1 - SDA0
|
||||
{ PIOA, PIO_PA25A_TWCK1, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT }, // TWCK1 - SCL0
|
||||
{ PIOA, PIO_PA24A_TWD1|PIO_PA25A_TWCK1, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT }, // All TWI1 pins
|
||||
|
||||
// Analog, 22..35
|
||||
// Analog, 25..38
|
||||
{ PIOB, PIO_PB5X1_AD0, ID_PIOB, PIO_INPUT, PIO_DEFAULT }, // AD0
|
||||
{ PIOB, PIO_PB6X1_AD1, ID_PIOB, PIO_INPUT, PIO_DEFAULT }, // AD1
|
||||
{ PIOB, PIO_PB7X1_AD2, ID_PIOB, PIO_INPUT, PIO_DEFAULT }, // AD2
|
||||
@ -67,12 +67,12 @@ extern const PinDescription g_APinDescription[]=
|
||||
{ PIOC, PIO_PC17X1_AD12B6, ID_PIOC, PIO_INPUT, PIO_DEFAULT }, // AD12
|
||||
{ PIOC, PIO_PC18X1_AD12B7, ID_PIOC, PIO_INPUT, PIO_DEFAULT }, // AD13
|
||||
|
||||
// External DAC, 36..38
|
||||
// External DAC, 39..41
|
||||
{ PIOB, PIO_PB9, ID_PIOB, PIO_OUTPUT_1, PIO_DEFAULT }, // DAC-CS
|
||||
{ PIOB, PIO_PB10, ID_PIOB, PIO_OUTPUT_1, PIO_DEFAULT }, // DAC-SCK
|
||||
{ PIOB, PIO_PB14, ID_PIOB, PIO_OUTPUT_1, PIO_DEFAULT }, // DAC-DIN
|
||||
|
||||
// PWM, 39..
|
||||
// PWM, 42..50
|
||||
{ PIOA, PIO_PA30B_TIOA2, ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT }, // PWM
|
||||
{ PIOA, PIO_PA4B_PWMH0, ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT }, // PWMH0
|
||||
{ PIOA, PIO_PA5B_PWMH1, ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT }, // PWMH1
|
||||
@ -83,9 +83,10 @@ extern const PinDescription g_APinDescription[]=
|
||||
{ PIOC, PIO_PC8B_PWML2, ID_PIOC, PIO_PERIPH_B, PIO_DEFAULT }, // PWML2
|
||||
{ PIOC, PIO_PC9B_PWML3, ID_PIOC, PIO_PERIPH_B, PIO_DEFAULT }, // PWML3
|
||||
|
||||
// Digital
|
||||
// 51
|
||||
{ PIOA, PIO_PA1, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT }, // PIN 10
|
||||
|
||||
|
||||
// Digital, 52..83
|
||||
{ PIOC, PIO_PC3 , ID_PIOC, PIO_OUTPUT_0, PIO_DEFAULT }, // PIN 22
|
||||
{ PIOC, PIO_PC2 , ID_PIOC, PIO_OUTPUT_0, PIO_DEFAULT }, // PIN 23
|
||||
{ PIOC, PIO_PC1 , ID_PIOC, PIO_OUTPUT_0, PIO_DEFAULT }, // PIN 24
|
||||
|
@ -55,16 +55,16 @@
|
||||
#define PIN_LED2 PIN_LED_RXL
|
||||
#define PIN_LED3 PIN_LED_TXL
|
||||
|
||||
static const uint8_t SS = 15 ;
|
||||
static const uint8_t MOSI = 13 ;
|
||||
static const uint8_t MISO = 12 ;
|
||||
static const uint8_t SCK = 14 ;
|
||||
#define PINS_UART (3u)
|
||||
|
||||
#define PINS_UART (5u)
|
||||
#define PINS_USART0 (6u)
|
||||
#define PINS_USART1 (9u)
|
||||
#define PINS_USART2 (12u)
|
||||
|
||||
#define PINS_USART0 (5u)
|
||||
#define PINS_USART1 (5u)
|
||||
#define PINS_USART2 (5u)
|
||||
static const uint8_t SS = 18 ;
|
||||
static const uint8_t MOSI = 16 ;
|
||||
static const uint8_t MISO = 15 ;
|
||||
static const uint8_t SCK = 17 ;
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
* Arduino objects - C++ only
|
||||
|
@ -34,11 +34,17 @@ void UARTClass::begin( const uint32_t dwBaudRate )
|
||||
|
||||
/* Configure baudrate */
|
||||
/* Asynchronous, no oversampling */
|
||||
_pUart->UART_BRGR = (SystemCoreClock / dwBaudRate) / 16 ;
|
||||
_pUart->UART_BRGR = (SystemCoreClock / dwBaudRate) >> 4 ;
|
||||
|
||||
/* Disable PDC channel */
|
||||
_pUart->UART_PTCR = UART_PTCR_RXTDIS | UART_PTCR_TXTDIS ;
|
||||
|
||||
/* Configure the ENDRX interrupt */
|
||||
_pUart->UART_IER=UART_IER_ENDRX ;
|
||||
|
||||
/* Enable UART interrupt in NVIC */
|
||||
// NVIC_EnableIRQ( _dwIrq ) ;
|
||||
|
||||
/* Enable receiver and transmitter */
|
||||
_pUart->UART_CR = UART_CR_RXEN | UART_CR_TXEN ;
|
||||
}
|
||||
@ -46,9 +52,9 @@ void UARTClass::begin( const uint32_t dwBaudRate )
|
||||
void UARTClass::end( void )
|
||||
{
|
||||
// wait for transmission of outgoing data
|
||||
while ( _tx_buffer->_iHead != _tx_buffer->_iTail )
|
||||
{
|
||||
}
|
||||
//while ( _tx_buffer->_iHead != _tx_buffer->_iTail )
|
||||
//{
|
||||
//}
|
||||
|
||||
// clear any received data
|
||||
_rx_buffer->_iHead = _rx_buffer->_iTail ;
|
||||
@ -75,66 +81,46 @@ int UARTClass::peek( void )
|
||||
|
||||
int UARTClass::read( void )
|
||||
{
|
||||
// if the head isn't ahead of the _iTail, we don't have any characters
|
||||
// if the head isn't ahead of the tail, we don't have any characters
|
||||
if ( _rx_buffer->_iHead == _rx_buffer->_iTail )
|
||||
{
|
||||
return -1 ;
|
||||
}
|
||||
else
|
||||
{
|
||||
unsigned char c = _rx_buffer->_aucBuffer[_rx_buffer->_iTail] ;
|
||||
uint8_t uc = _rx_buffer->_aucBuffer[_rx_buffer->_iTail] ;
|
||||
|
||||
_rx_buffer->_iTail = (unsigned int)(_rx_buffer->_iTail + 1) % SERIAL_BUFFER_SIZE ;
|
||||
|
||||
return c ;
|
||||
return uc ;
|
||||
}
|
||||
}
|
||||
|
||||
void UARTClass::flush( void )
|
||||
{
|
||||
while ( _tx_buffer->_iHead != _tx_buffer->_iTail )
|
||||
{
|
||||
}
|
||||
//while ( _tx_buffer->_iHead != _tx_buffer->_iTail )
|
||||
//{
|
||||
//}
|
||||
}
|
||||
|
||||
void UARTClass::write( const uint8_t uc )
|
||||
void UARTClass::write( const uint8_t uc_data )
|
||||
{
|
||||
int i = (_tx_buffer->_iHead + 1) % SERIAL_BUFFER_SIZE ;
|
||||
|
||||
// If the output buffer is full, there's nothing for it other than to
|
||||
// wait for the interrupt handler to empty it a bit
|
||||
while ( i == _tx_buffer->_iTail )
|
||||
/* Check if the transmitter is ready */
|
||||
if ( (_pUart->UART_SR & UART_SR_TXRDY) != UART_SR_TXRDY )
|
||||
{
|
||||
return ;
|
||||
}
|
||||
|
||||
_tx_buffer->_aucBuffer[_tx_buffer->_iHead] = uc ;
|
||||
_tx_buffer->_iHead = i ;
|
||||
|
||||
/* Wait for the transmitter to be ready */
|
||||
while ( (_pUart->UART_SR & UART_SR_TXEMPTY) == 0 ) ;
|
||||
|
||||
/* Send character */
|
||||
_pUart->UART_THR=uc ;
|
||||
_pUart->UART_THR = uc_data ;
|
||||
}
|
||||
|
||||
void UARTClass::IrqHandler( void )
|
||||
{
|
||||
// RX char IT
|
||||
uint8_t uc = _pUart->UART_RHR ;
|
||||
_rx_buffer->store_char( uc ) ;
|
||||
|
||||
// TX FIFO empty IT
|
||||
if ( _tx_buffer->_iHead == _tx_buffer->_iTail )
|
||||
/* Did we receive data ? */
|
||||
if ( (_pUart->UART_IER & UART_IER_ENDRX) == UART_IER_ENDRX )
|
||||
{
|
||||
// Buffer empty, so disable interrupts
|
||||
}
|
||||
else
|
||||
{
|
||||
// There is more data in the output buffer. Send the next byte
|
||||
uc = _tx_buffer->_aucBuffer[_tx_buffer->_iTail] ;
|
||||
_tx_buffer->_iTail = (_tx_buffer->_iTail + 1) % SERIAL_BUFFER_SIZE ;
|
||||
|
||||
_pUart->UART_THR = uc ;
|
||||
_rx_buffer->store_char( _pUart->UART_RHR ) ;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,13 +1,18 @@
|
||||
/*
|
||||
%atmel_license%
|
||||
*/
|
||||
|
||||
#ifndef _UART_CLASS_
|
||||
#define _UART_CLASS_
|
||||
|
||||
// UART.cpp need this class to be predefined
|
||||
//class UARTClass ;
|
||||
|
||||
#include "Arduino.h"
|
||||
|
||||
class UARTClass : public HardwareSerial
|
||||
{
|
||||
protected:
|
||||
RingBuffer *_rx_buffer ;
|
||||
RingBuffer *_tx_buffer ;
|
||||
|
||||
protected:
|
||||
Uart* _pUart ;
|
||||
IRQn_Type _dwIrq ;
|
||||
@ -29,8 +34,8 @@ class UARTClass : public HardwareSerial
|
||||
#if defined __GNUC__ /* GCC CS3 */
|
||||
using Print::write ; // pull in write(str) and write(buf, size) from Print
|
||||
#elif defined __ICCARM__ /* IAR Ewarm 5.41+ */
|
||||
virtual void write( const char *str ) ;
|
||||
virtual void write( const uint8_t *buffer, size_t size ) ;
|
||||
// virtual void write( const char *str ) ;
|
||||
// virtual void write( const uint8_t *buffer, size_t size ) ;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@ -36,16 +36,19 @@ void USARTClass::begin( const uint32_t dwBaudRate )
|
||||
/* Disable PDC channel */
|
||||
_pUsart->US_PTCR = US_PTCR_RXTDIS | US_PTCR_TXTDIS ;
|
||||
|
||||
/* Enable UART interrupt in NVIC */
|
||||
// NVIC_EnableIRQ( _dwIrq ) ;
|
||||
|
||||
/* Enable receiver and transmitter */
|
||||
_pUsart->US_CR = US_CR_RXEN | US_CR_TXEN ;
|
||||
}
|
||||
|
||||
void USARTClass::end()
|
||||
void USARTClass::end( void )
|
||||
{
|
||||
// wait for transmission of outgoing data
|
||||
while ( _tx_buffer->_iHead != _tx_buffer->_iTail )
|
||||
{
|
||||
}
|
||||
//while ( _tx_buffer->_iHead != _tx_buffer->_iTail )
|
||||
//{
|
||||
//}
|
||||
|
||||
// clear any received data
|
||||
_rx_buffer->_iHead = _rx_buffer->_iTail ;
|
||||
@ -55,7 +58,7 @@ void USARTClass::end()
|
||||
|
||||
int USARTClass::available( void )
|
||||
{
|
||||
return (unsigned int)(SERIAL_BUFFER_SIZE + _rx_buffer->_iHead - _rx_buffer->_iTail) % SERIAL_BUFFER_SIZE ;
|
||||
return (uint32_t)(SERIAL_BUFFER_SIZE + _rx_buffer->_iHead - _rx_buffer->_iTail) % SERIAL_BUFFER_SIZE ;
|
||||
}
|
||||
|
||||
int USARTClass::peek( void )
|
||||
@ -72,67 +75,46 @@ int USARTClass::peek( void )
|
||||
|
||||
int USARTClass::read( void )
|
||||
{
|
||||
// if the _iHead isn't ahead of the _iTail, we don't have any characters
|
||||
// if the head isn't ahead of the tail, we don't have any characters
|
||||
if ( _rx_buffer->_iHead == _rx_buffer->_iTail )
|
||||
{
|
||||
return -1 ;
|
||||
}
|
||||
else
|
||||
{
|
||||
unsigned char c = _rx_buffer->_aucBuffer[_rx_buffer->_iTail] ;
|
||||
uint8_t uc = _rx_buffer->_aucBuffer[_rx_buffer->_iTail] ;
|
||||
|
||||
_rx_buffer->_iTail = (unsigned int)(_rx_buffer->_iTail + 1) % SERIAL_BUFFER_SIZE ;
|
||||
|
||||
return c ;
|
||||
return uc ;
|
||||
}
|
||||
}
|
||||
|
||||
void USARTClass::flush( void )
|
||||
{
|
||||
while ( _tx_buffer->_iHead != _tx_buffer->_iTail )
|
||||
{
|
||||
}
|
||||
//while ( _tx_buffer->_iHead != _tx_buffer->_iTail )
|
||||
//{
|
||||
//}
|
||||
}
|
||||
|
||||
void USARTClass::write( uint8_t uc )
|
||||
void USARTClass::write( const uint8_t uc_data )
|
||||
{
|
||||
int i = (_tx_buffer->_iHead + 1) % SERIAL_BUFFER_SIZE ;
|
||||
|
||||
// If the output buffer is full, there's nothing for it other than to
|
||||
// wait for the interrupt handler to empty it a bit
|
||||
while ( i == _tx_buffer->_iTail )
|
||||
/* Check if the transmitter is ready */
|
||||
if ( (_pUsart->US_CSR & US_CSR_TXRDY) != US_CSR_TXRDY )
|
||||
{
|
||||
return ;
|
||||
}
|
||||
|
||||
_tx_buffer->_aucBuffer[_tx_buffer->_iHead] = uc ;
|
||||
_tx_buffer->_iHead = i ;
|
||||
|
||||
/* Wait for the transmitter to be ready */
|
||||
while ( (_pUsart->US_CSR & US_CSR_TXEMPTY) == 0 ) ;
|
||||
|
||||
/* Send character */
|
||||
_pUsart->US_THR=uc ;
|
||||
_pUsart->US_THR=uc_data ;
|
||||
}
|
||||
|
||||
void USARTClass::IrqHandler( void )
|
||||
{
|
||||
// RX char IT
|
||||
uint8_t uc = _pUsart->US_RHR ;
|
||||
|
||||
_rx_buffer->store_char( uc ) ;
|
||||
|
||||
// TX FIFO empty IT
|
||||
if ( _tx_buffer->_iHead == _tx_buffer->_iTail )
|
||||
/* Did we receive data ? */
|
||||
if ( (_pUsart->US_IER & US_IER_ENDRX) == US_IER_ENDRX )
|
||||
{
|
||||
// Buffer empty, so disable interrupts
|
||||
}
|
||||
else
|
||||
{
|
||||
// There is more data in the output buffer. Send the next byte
|
||||
uc = _tx_buffer->_aucBuffer[_tx_buffer->_iTail] ;
|
||||
_tx_buffer->_iTail = (_tx_buffer->_iTail + 1) % SERIAL_BUFFER_SIZE ;
|
||||
|
||||
_pUsart->US_THR = uc ;
|
||||
_rx_buffer->store_char( _pUsart->US_RHR ) ;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,13 +1,14 @@
|
||||
#ifndef _USART_CLASS_
|
||||
#define _USART_CLASS_
|
||||
|
||||
// USART.cpp need this class to be predefined
|
||||
//class USARTClass ;
|
||||
|
||||
#include "Arduino.h"
|
||||
|
||||
class USARTClass : public HardwareSerial
|
||||
class USARTClass // : public HardwareSerial
|
||||
{
|
||||
protected:
|
||||
RingBuffer *_rx_buffer ;
|
||||
RingBuffer *_tx_buffer ;
|
||||
|
||||
protected:
|
||||
Usart* _pUsart ;
|
||||
IRQn_Type _dwIrq ;
|
||||
@ -27,10 +28,10 @@ class USARTClass : public HardwareSerial
|
||||
void IrqHandler( void ) ;
|
||||
|
||||
#if defined __GNUC__ /* GCC CS3 */
|
||||
using Print::write ; // pull in write(str) and write(buf, size) from Print
|
||||
// using Print::write ; // pull in write(str) and write(buf, size) from Print
|
||||
#elif defined __ICCARM__ /* IAR Ewarm 5.41+ */
|
||||
virtual void write( const char *str ) ;
|
||||
virtual void write( const uint8_t *buffer, size_t size ) ;
|
||||
// virtual void write( const char *str ) ;
|
||||
// virtual void write( const uint8_t *buffer, size_t size ) ;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@ -52,7 +52,8 @@ CPPFLAGS += -Wpacked -Wredundant-decls -Winline -Wlong-long
|
||||
#CPPFLAGS += -Wmissing-noreturn
|
||||
#CPPFLAGS += -Wconversion
|
||||
|
||||
CPPFLAGS += --param max-inline-insns-single=500 -mcpu=cortex-m3 -mthumb -mlong-calls -ffunction-sections -fno-rtti -fno-exceptions
|
||||
# -fno-rtti -fno-exceptions
|
||||
CPPFLAGS += --param max-inline-insns-single=500 -mcpu=cortex-m3 -mthumb -mlong-calls -ffunction-sections
|
||||
CPPFLAGS += $(OPTIMIZATION) $(INCLUDES) -D$(CHIP)
|
||||
|
||||
# To reduce application size use only integer printf function.
|
||||
|
@ -27,5 +27,7 @@ set *0x80004 = *0x80004 & 0xFFFFFFFE
|
||||
mon reg pc=(0x80004)
|
||||
info reg
|
||||
|
||||
break main
|
||||
|
||||
# end of 'reset' command
|
||||
end
|
||||
|
@ -1,23 +1,29 @@
|
||||
#*************************************************
|
||||
#*******************************************************
|
||||
#
|
||||
# Connect to J-Link and debug application in sram on SAM3U
|
||||
# Connect to J-Link and debug application in flash.
|
||||
#
|
||||
# Note:
|
||||
# First,users should do Step1 and Step2 according to your project,
|
||||
# then do Step3.
|
||||
|
||||
# Step1: Connect to the J-Link gdb server
|
||||
#target remote localhost:2331
|
||||
#mon reset
|
||||
# define 'reset' command
|
||||
define reset
|
||||
|
||||
# Step2: Load file(eg. getting-started project)
|
||||
#load bin/basic-dhrystone-project-at91sam3u-ek-at91sam3u4-sram.elf
|
||||
#symbol-file bin/basic-dhrystone-project-at91sam3u-ek-at91sam3u4-sram.elf
|
||||
# Connect to the J-Link gdb server
|
||||
target remote localhost:2331
|
||||
# Reset the chip to get to a known state
|
||||
monitor reset
|
||||
|
||||
# Step3: Initializing PC and stack pointer
|
||||
# Perpheral reset RSTC_CR
|
||||
# Load the program
|
||||
load
|
||||
|
||||
# Reset peripheral (RSTC_CR)
|
||||
set *0x400e1200 = 0xA5000004
|
||||
# Modify pc value to even before writing pc register
|
||||
|
||||
# Initializing PC and stack pointer
|
||||
mon reg sp=(0x20000000)
|
||||
set *0x20000004 = *0x20000004 & 0xFFFFFFFE
|
||||
mon reg pc=(0x20000004)
|
||||
info reg
|
||||
|
||||
break main
|
||||
|
||||
# end of 'reset' command
|
||||
end
|
||||
|
@ -142,7 +142,7 @@ extern void init( void )
|
||||
/* Disable watchdog, common to all SAM variants */
|
||||
WDT_Disable( WDT ) ;
|
||||
|
||||
// Initialize Serial port UART0, common to all SAM3 variants
|
||||
// Initialize UART Serial port
|
||||
PIO_Configure( g_APinDescription[PINS_UART].pPort, g_APinDescription[PINS_UART].ulPinType,
|
||||
g_APinDescription[PINS_UART].ulPin, g_APinDescription[PINS_UART].ulPinAttribute ) ;
|
||||
|
||||
|
@ -54,6 +54,7 @@
|
||||
#define PIN_LED_GREEN (1u)
|
||||
#define PIN_LED_RED (2u)
|
||||
#define PIN_LED PIN_LED_BLUE
|
||||
#define PIN_LED2 PIN_LED_GREEN
|
||||
|
||||
static const uint8_t SS = 23 ;
|
||||
static const uint8_t MOSI = 21 ;
|
||||
|
Reference in New Issue
Block a user