1
0
mirror of git://projects.qi-hardware.com/ben-wpan.git synced 2024-11-22 14:10:37 +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:
Josef Filzmaier 2017-09-11 13:58:32 +02:00 committed by Stefan Schmidt
parent ac710d0de4
commit 8c574484b8
5 changed files with 116 additions and 1 deletions

View File

@ -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

View File

@ -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

View File

@ -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
View 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
View 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_ */