gnupic: 18f c and asm, sdcc only ok, +asm+gplink problem


Previous by date: 11 Jan 2013 11:39:52 -0000 Re: Some problems: gputils with Ubuntu12.10 - help needed with urgency - PLS, Antonio Todo Bom
Next by date: 11 Jan 2013 11:39:52 -0000 blinking leds with usb port, Jorge Barros de Abreu
Previous in thread:
Next in thread:

Subject: 18f c and asm, sdcc only ok, +asm+gplink problem
From: xgpasm ####@####.####
Date: 11 Jan 2013 11:39:52 -0000
Message-Id: <loom.20130111T114737-299@post.gmane.org>

Hi aLl,

I'm lost, i've spend time on this, i'm sure i've forget something basic, but 
i cant' figure out ! Sorry for my crap description below, but i don't know 
howto
explain it.

Compilation using the Makefile show no error, but the program is not working. 

If i use only sdcc with no -c flag (command below), the main it's work
perfectly, but no asm is include, -c flag effect.

sdcc -I/usr/share/sdcc/include/pic16 -I./include -I./lib -I./ -mpic16 -p18f2455 
--verbose uart18f.c 

When i link using the Makefile to existing asm code, the program is not working
and gpsim show this error :

gpsim -c uart18f.stc

  Read: 0x0000 from REG000(0x0000)
  Wrote: 0x0000 to postdec1(0x0FE5) was 0x0000
  Wrote: 0x00D3 to fsrl1(0x0FE1) was 0x00D4
  Wrote: 0x000F to fsrh1(0x0FE2) was 0x000F
  Invalid Trace entry: 0x0

I see that the program didn't start where i need to start, i mean, in the
source memory view, the cursor is never moving, but something is running
in background....very strange..

FYI...I'm using this Makefile for different other code using 16f arch, but 
in 18f it fail.

Any help would be very appreciated...thanks in advance
xgpasm

Version :

sdcc -v
SDCC : mcs51/gbz80/z80/avr/ds390/pic16/pic14/TININative/xa51/ds400/hc08 2.9.0
#5416 (Feb  3 2010) (UNIX)

gpasm -v
gpasm-0.13.7 beta

gplink -v
gplink-0.13.7 beta

Makefile :
==========

INCLUDE=-I/usr/share/sdcc/include/pic16 -I./include -I./lib -I./
PROCESSOR_FLAG=-mpic16
PROCESSOR_TYPE=-p18f2455
CC=sdcc
AS=gpasm
PROC=-Dpic18f2455i
PROC_FLAG=-D__18f2455i
CFLAGS=-c --verbose
LNK=gplink
INC=-I/usr/share/sdcc/lib/pic16
LKR=-s/usr/share/gputils/lkr/18f2455i.lkr
LIBPROC=/usr/share/sdcc/lib/pic16/libdev18f2455.lib
/usr/share/sdcc/lib/pic16/libio18f2455.lib /usr/share/sdcc/lib/pic16/libc18f.lib
LIBSDCC=/usr/share/sdcc/lib/pic16/libsdcc.lib
LIBM=/usr/share/sdcc/lib/pic16/libm18f.lib
HEX_FILES=uart18f.hex

all: clean $(HEX_FILES)

%.hex: %.c
	$(CC) $(INCLUDE) $(PROCESSOR_FLAG) $(PROCESSOR_TYPE) $(CFLAGS) $<
#	$(AS) $(PROC) $(PROC_FLAG) -c $*.asm -o $*.o
	$(AS) $(PROC) $(PROC_FLAG) -c lib/utils2.asm  -o utils2.o
	$(LNK) $(INC) $(LKR) -d -m -c -o $* uart18f.o utils2.o $(LIBPROC) $(LIBPROC1)
$(LIBSDCC)
clean:
	$(RM) *.asm *.cod *.lst *.hex *.p *.d *.lnk *~

usart18f.c
==========

#pragma stack 0x200 0xff /* (<- always first line in main.c) */
#define __18F2455i
#include <pic18f2455.h>
#include <uart18f.h>
#include <utils2.h>
#include <stdio.h>
#include <usart.h>

code char at 0x300000 CONFIG1L = 0x24; // USB, /2 post (48MHz), /5 pre
(20 MHz)
code char at 0x300001 CONFIG1H = 0x0c;// IESO=0, FCMEN=0, HS (20MHz)
code char at 0x300002 CONFIG2L = 0x20;// Brown out off, PWRT On
code char at 0x300003 CONFIG2H = 0x00;// WDT off
code char at 0x300004 CONFIG3L = 0xff;// Unused configuration bits
code char at 0x300005 CONFIG3H = 0x01; // No MCLR, PORTB digital, CCP2 - RC1
code char at 0x300006 CONFIG4L = 0x80;// ICD off, ext off, LVP off, stk
ovr off

void initUsart()
{

    usart_open(    // Use USART library to initialise the hardware
            USART_TX_INT_OFF
            & USART_RX_INT_OFF
            & USART_BRGH_HIGH
            & USART_ASYNCH_MODE
            & USART_EIGHT_BIT,
            129  
            );
            stdout = STREAM_USART;
            stdin = STREAM_USART;

}

//
// Main program :
//

void main(void)
{
	unsigned long loop=0;
	
	OSCCON = 0x60;        									/* 0011 0000 */

	TRISB=0b10101001;									// 
	TRISA=0b00010111;									// All analog input
	TRISCbits.TRISC7 = 1; 		// RX (1:input)
	TRISCbits.TRISC6 = 1; 		// TX (0:output)	
		
	initUsart();

	printf("Init done\n");

	loop=0;
	while ( loop == 0) {
			if (usart_drdy())
			{
				unsigned char rxByte;
				_asm clrwdt _endasm;

				rxByte = usart_getc();
				
				usart_putc(rxByte);
				if (rxByte == 'x')
				{
					printf("Ho oui tu m'excites!!!\n");
					loop = 1;
				}
			}
	}
    
}

utils2.asm
==========
			PROCESSOR 18f2455
			Radix DEC
			EXPAND
 
			#include "p18f2455.inc"  ; Include header file 
	
			UDATA

			CBLOCK	0x060 

			; Send 232
			cycl_1, cycl_2, Byte, rxData
			
; ----------- 				
;TOTAL	3 byte d'usage general
; ----------- 
			ENDC	

OledIn		equ 7	; Rxd <- Txd oled
OledOut		equ 6   ; Txd -> Rxd oled

			CODE

		
;**********************************************************
; Timer pour 1 bit		
; 115000 Bps
_rs115bps	
		movlw	D'8'					
		movwf	cycl_2 
_rs115wait														; 4 cycles
		nop
		decfsz	cycl_2, 1	
		goto	_rs115wait
		return
;**********************************************************
; Timer de 1/2 bit
; 115000 Bps
; 3 x 200ns x 3 = 1.8us
_rs115half		
		movlw	D'3'					
		movwf	cycl_2 
_rs115half2	
		nop															; 4 cycles
		decfsz	cycl_2 , f	
		goto	_rs115half2
		return
		
		GLOBAL	_RX_Oled,_Send_Oled
		
		end


uart18f.h
=========
extern void Send_Oled(unsigned char c);
extern unsigned char RX_Oled(void);

FOR GPSIM 
==========
uart18f.conf
============
# Module libraries:
module library libgpsim_modules.so


# Modules:
# pic18f2455i.CONFIG=$ff
pic18f2455.WarnMode=true
pic18f2455.SafeMode=true
pic18f2455.UnknownMode=true
pic18f2455.BreakOnReset=true
pic18f2455.BreakOnInvalidRegisterRead=true
pic18f2455.BreakOnInvalidRegisterWrite=true
pic18f2455.frequency=20000000.000000000
pic18f2455.xpos=144.0000000000000
pic18f2455.ypos=192.0000000000000

module load usart U1
U1.rxbaud=9600
U1.txbaud=9600
U1.rx=13
U1.tx=0
U1.crlf=true
U1.loop=false
U1.console=true
U1.xpos = 300
U1.ypos = 192

# Connections:

# receive from xbee
node n_xbee_rx
attach n_xbee_rx portc7 U1.TXPIN

# transmit to xbee
node n_xbee_tx
attach n_xbee_tx portc6 U1.RXPIN

uart18f.stc

# ----------- myproject.stc ---------------
load s uart18f.cod
frequency 20000000
load c uart18f.conf
# -----------------------------------------

Sorry for the spam ;-))


Previous by date: 11 Jan 2013 11:39:52 -0000 Re: Some problems: gputils with Ubuntu12.10 - help needed with urgency - PLS, Antonio Todo Bom
Next by date: 11 Jan 2013 11:39:52 -0000 blinking leds with usb port, Jorge Barros de Abreu
Previous in thread:
Next in thread:


Powered by ezmlm-browse 0.20.