mirror of
git://projects.qi-hardware.com/ben-wpan.git
synced 2024-11-25 18:57:11 +02:00
atusb/fw: Introduce DEBUG flag
This flag can be used to enable debugging over uart. Currently only available for boards with the at90usb1287 chip. Signed-off-by: Josef Filzmaier <j.filzmaier@gmx.at>
This commit is contained in:
parent
ac710d0de4
commit
8c574484b8
@ -13,11 +13,16 @@
|
|||||||
SHELL = /bin/bash
|
SHELL = /bin/bash
|
||||||
|
|
||||||
NAME = atusb
|
NAME = atusb
|
||||||
|
DEBUG = false
|
||||||
|
|
||||||
CFLAGS = -g -mmcu=$(CHIP) -DBOOT_ADDR=$(BOOT_ADDR) \
|
CFLAGS = -g -mmcu=$(CHIP) -DBOOT_ADDR=$(BOOT_ADDR) \
|
||||||
-Wall -Wextra -Wshadow -Werror -Wno-unused-parameter \
|
-Wall -Wextra -Wshadow -Werror -Wno-unused-parameter \
|
||||||
-Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes
|
-Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes
|
||||||
|
|
||||||
|
ifeq ($(DEBUG),true)
|
||||||
|
CFLAGS += -DDEBUG
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(NAME),rzusb)
|
ifeq ($(NAME),rzusb)
|
||||||
CHIP=at90usb1287
|
CHIP=at90usb1287
|
||||||
CFLAGS += -DRZUSB -DAT86RF230
|
CFLAGS += -DRZUSB -DAT86RF230
|
||||||
@ -46,6 +51,9 @@ OBJS = atusb.o board.o board_app.o sernum.o spi.o descr.o ep0.o \
|
|||||||
BOOT_OBJS = boot.o board.o sernum.o spi.o flash.o dfu.o \
|
BOOT_OBJS = boot.o board.o sernum.o spi.o flash.o dfu.o \
|
||||||
dfu_common.o usb.o boot-atu2.o
|
dfu_common.o usb.o boot-atu2.o
|
||||||
|
|
||||||
|
ifeq ($(DEBUG),true)
|
||||||
|
OBJS += uart.o
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(NAME),rzusb)
|
ifeq ($(NAME),rzusb)
|
||||||
OBJS += board_rzusb.o
|
OBJS += board_rzusb.o
|
||||||
|
@ -24,6 +24,10 @@
|
|||||||
#include "spi.h"
|
#include "spi.h"
|
||||||
#include "atusb/ep0.h"
|
#include "atusb/ep0.h"
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
#include "uart.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
@ -35,6 +39,13 @@ int main(void)
|
|||||||
|
|
||||||
/* now we should be at 8 MHz */
|
/* now we should be at 8 MHz */
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
uart_init();
|
||||||
|
static FILE atben_stdout = FDEV_SETUP_STREAM(uart_write_char, NULL,
|
||||||
|
_FDEV_SETUP_WRITE);
|
||||||
|
stdout = &atben_stdout;
|
||||||
|
#endif
|
||||||
|
|
||||||
usb_init();
|
usb_init();
|
||||||
ep0_init();
|
ep0_init();
|
||||||
#ifdef ATUSB
|
#ifdef ATUSB
|
||||||
|
@ -45,8 +45,15 @@
|
|||||||
#define HW_TYPE HW_TYPE_RZUSB
|
#define HW_TYPE HW_TYPE_RZUSB
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
#include "uart.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#define debug(FORMAT,args...) printf(FORMAT,##args)
|
||||||
|
#define error(FORMAT,args...) printf(FORMAT,##args)
|
||||||
|
#else
|
||||||
#define debug(...)
|
#define debug(...)
|
||||||
#define error(...)
|
#define error(...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static const uint8_t id[] = { EP0ATUSB_MAJOR, EP0ATUSB_MINOR, HW_TYPE };
|
static const uint8_t id[] = { EP0ATUSB_MAJOR, EP0ATUSB_MINOR, HW_TYPE };
|
||||||
|
64
atusb/fw/uart.c
Normal file
64
atusb/fw/uart.c
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
/*
|
||||||
|
* fw/uart.h - Functions needed for debugging over uart
|
||||||
|
*
|
||||||
|
* Code adapted from http://www.roboternetz.de/wissen/index.php/UART_mit_avr-gcc
|
||||||
|
* and http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
|
||||||
|
*
|
||||||
|
* Published under the Creative Commons Share-Alike licence
|
||||||
|
* https://creativecommons.org/licenses/by-sa/2.0/de/
|
||||||
|
*
|
||||||
|
* S. Salewski 2007
|
||||||
|
*
|
||||||
|
* Adapted by
|
||||||
|
* Josef Filzmaier 2017
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <avr/io.h>
|
||||||
|
#include "uart.h"
|
||||||
|
|
||||||
|
#define USART_BAUD 38400UL
|
||||||
|
#define F_CPU 8000000UL
|
||||||
|
|
||||||
|
#define Wait_USART_Ready() while (!(UCSR1A & (1<<UDRE1)))
|
||||||
|
#define UART_UBRR (F_CPU/(16L*USART_BAUD)-1)
|
||||||
|
|
||||||
|
// initialize USART, 8N1 mode
|
||||||
|
void
|
||||||
|
uart_init(void)
|
||||||
|
{
|
||||||
|
/* TODO: Find a working configuration for uart for the atmega32u2 */
|
||||||
|
#if CHIP == at90usb1287
|
||||||
|
CLKPR = (1 << CLKPCE);
|
||||||
|
CLKPR = 0; // clock prescaler == 0, so we have 16 MHz mpu frequency
|
||||||
|
UBRR1 = UART_UBRR;
|
||||||
|
UCSR1C = (1 << UCSZ10) | (1 << UCSZ11);
|
||||||
|
UCSR1B = (1 << TXEN1);
|
||||||
|
do
|
||||||
|
{
|
||||||
|
UDR1;
|
||||||
|
}
|
||||||
|
while (UCSR1A & (1 << RXC1));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int uart_write_char(char c, FILE* stream)
|
||||||
|
{
|
||||||
|
if (c == '\n'){
|
||||||
|
uart_new_line();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Wait_USART_Ready();
|
||||||
|
UDR1 = c;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
uart_new_line(void)
|
||||||
|
{
|
||||||
|
Wait_USART_Ready();
|
||||||
|
UDR1 = '\r';
|
||||||
|
Wait_USART_Ready();
|
||||||
|
UDR1 = '\n';
|
||||||
|
}
|
25
atusb/fw/uart.h
Normal file
25
atusb/fw/uart.h
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* fw/uart.h - Functions needed for debugging over uart
|
||||||
|
*
|
||||||
|
* Code adapted from http://www.roboternetz.de/wissen/index.php/UART_mit_avr-gcc
|
||||||
|
* and http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
|
||||||
|
*
|
||||||
|
* Published under the Creative Commons Share-Alike licence
|
||||||
|
* https://creativecommons.org/licenses/by-sa/2.0/de/
|
||||||
|
*
|
||||||
|
* S. Salewski 2007
|
||||||
|
*
|
||||||
|
* Adapted by
|
||||||
|
* Josef Filzmaier 2017
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef UART_H_
|
||||||
|
#define UART_H_
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
void uart_init(void);
|
||||||
|
int uart_write_char(char c, FILE* stream);
|
||||||
|
void uart_new_line(void);
|
||||||
|
|
||||||
|
#endif /* UART_H_ */
|
Loading…
Reference in New Issue
Block a user