working prototype
This commit is contained in:
@@ -1,11 +1,12 @@
|
||||
#include <avr/io.h>
|
||||
#include <util/delay.h>
|
||||
#include "uart.h"
|
||||
#include <avr/interrupt.h>
|
||||
#include "yaMBSiavr.h"
|
||||
|
||||
uint16_t inputStatus[9];
|
||||
|
||||
void init_clk(void)
|
||||
{
|
||||
|
||||
// ========= System Clock configuration =========
|
||||
// Set to external 16Mhz crystal, using the PLL at *2
|
||||
// set it to be a 12-16Mhz crystal with a slow start-up time.
|
||||
@@ -28,18 +29,47 @@ void init_clk(void)
|
||||
// ==============================================
|
||||
}
|
||||
|
||||
int main(void){
|
||||
init_clk();
|
||||
init_uart();
|
||||
PORTD.DIRSET = 1 << 5;
|
||||
sei();
|
||||
|
||||
for(;;){
|
||||
char tmp = USARTD0.DATA;
|
||||
if(!tmp)
|
||||
tmp='a';
|
||||
USARTD0.DATA = tmp;
|
||||
PORTD.OUTTGL = 1 << 5;
|
||||
_delay_ms(1000);
|
||||
void init_timer_100us(){
|
||||
TCC0.CTRLA |= TC_CLKSEL_DIV256_gc;
|
||||
TCC0.PER = 13; // ==> 9615us
|
||||
TCC0.INTCTRLA |= TC_OVFINTLVL_MED_gc;
|
||||
}
|
||||
|
||||
void modbusGet(void) {
|
||||
if (modbusGetBusState() & (1<<ReceiveCompleted))
|
||||
{
|
||||
switch(rxbuffer[1]) {
|
||||
case fcReadHoldingRegisters:
|
||||
inputStatus[0]=(~PORTC.IN) & 0xFF;
|
||||
modbusExchangeRegisters(inputStatus, 0, 8);
|
||||
break;
|
||||
default:
|
||||
modbusSendException(ecIllegalFunction);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main(void){
|
||||
init_clk();
|
||||
PORTD.DIRSET = 1 << 5;
|
||||
|
||||
PORTCFG.MPCMASK = 0xFF;
|
||||
PORTC.PIN1CTRL = PORT_OPC_PULLUP_gc;
|
||||
|
||||
init_timer_100us();
|
||||
|
||||
PMIC.CTRL |= PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm;
|
||||
sei();
|
||||
|
||||
modbusSetAddress(1);
|
||||
modbusInit();
|
||||
|
||||
for(;;){
|
||||
modbusGet();
|
||||
}
|
||||
}
|
||||
|
||||
ISR(TCC0_OVF_vect){
|
||||
modbusTickTimer();
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
TARGET = main.elf
|
||||
FILES = main fifo uart yaMBSiavr
|
||||
FILES = main yaMBSiavr
|
||||
MCU = atxmega32a4
|
||||
PROGC = x32a4
|
||||
CC = avr-gcc
|
||||
@@ -7,7 +7,7 @@ TOOL = atmelice_pdi
|
||||
|
||||
BUILDDIR = build
|
||||
|
||||
DEFINES = -DF_CPU=32000000UL
|
||||
DEFINES = -DF_CPU=32000000UL -DBOARDTYPE=9ch_pt100
|
||||
|
||||
CFLAGS =-mmcu=$(MCU) -O2 -Wall $(DEFINES) -std=c99 -ffunction-sections -fdata-sections
|
||||
LDFLAGS =-mmcu=$(MCU) -Wl,--gc-sections
|
||||
|
||||
@@ -222,7 +222,8 @@ ISR(UART_TRANSMIT_COMPLETE_INTERRUPT)
|
||||
modbusReset();
|
||||
}
|
||||
|
||||
//TODO
|
||||
const uint16_t bsel = 208;
|
||||
const int8_t bscale = 0;
|
||||
void modbusInit(void)
|
||||
{
|
||||
#ifndef __AVR_ATxmega32A4__
|
||||
@@ -240,12 +241,28 @@ void modbusInit(void)
|
||||
transceiver_rxen();
|
||||
#endif
|
||||
BusState=(1<<TimerActive);
|
||||
#elif
|
||||
//BRR
|
||||
//RX, TX enable
|
||||
#else
|
||||
//8bit
|
||||
USARTD0.CTRLC = USART_CHSIZE0_bm | USART_CHSIZE1_bm;
|
||||
|
||||
//38400
|
||||
USARTD0.BAUDCTRLA = bsel;
|
||||
USARTD0.BAUDCTRLB = 0 | (bsel >> 8) | (bscale << USART_BSCALE0_bp);
|
||||
|
||||
USARTD0.CTRLB = USART_TXEN_bm | USART_RXEN_bm;
|
||||
|
||||
//Interrupt enable (levels)
|
||||
//Physical type
|
||||
//Busstate
|
||||
USARTD0.CTRLA |= USART_RXCINTLVL_HI_gc;
|
||||
USARTD0.CTRLA |= USART_TXCINTLVL_HI_gc;
|
||||
|
||||
PORTD_OUTSET = PIN3_bm;
|
||||
PORTD_DIRSET = PIN3_bm;
|
||||
PORTD_OUTCLR = PIN2_bm;
|
||||
PORTD_DIRCLR = PIN2_bm;
|
||||
|
||||
//TODO Physical type 485
|
||||
|
||||
BusState=(1<<TimerActive);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -267,6 +284,7 @@ void modbusSendMessage(unsigned char packtop)
|
||||
#ifndef __AVR_ATxmega32A4__
|
||||
UART_CONTROL|=(1<<UART_UDRIE);
|
||||
#else
|
||||
//TODO use define for usartd
|
||||
USARTD0_CTRLA |= USART_DREINTLVL_HI_gc;
|
||||
#endif
|
||||
|
||||
|
||||
@@ -219,7 +219,7 @@ THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* Use 485 or 232, default: 485
|
||||
* Use 232 for testing purposes or very simple applications that do not require RS485 and bus topology.
|
||||
*/
|
||||
#define PHYSICAL_TYPE 485 //possible values: 485, 232
|
||||
#define PHYSICAL_TYPE 232//485 //possible values: 485, 232
|
||||
|
||||
/*
|
||||
#define modbusBaudrate 38400
|
||||
|
||||
Reference in New Issue
Block a user