Mercurial > public > hwos_code
view src/hwos.asm @ 285:cd2320cd6f9a
NEW unit tests for gas volumes...
author | jdg@air |
---|---|
date | Fri, 29 May 2015 01:25:45 +0200 |
parents | 653a3ab08062 |
children | cf929551d31c |
line wrap: on
line source
;============================================================================= ; ; File hwos.asm ; ; Definition of the hwOS dive computer platform. ; ; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved. ;============================================================================= ; HISTORY ; 2011-05-24 : [jDG] Cleanups from initial Matthias code. ; 2011-06-24 : [MH] Added clock speeds. #include "hwos.inc" ;============================================================================= ;----------------------------- CONFIG --------------------------------- CONFIG RETEN = OFF ;Disabled - Controlled by SRETEN bit CONFIG SOSCSEL = HIGH ;High Power SOSC circuit selected CONFIG XINST = OFF ;Code won't excute in extended mode... CONFIG FOSC = INTIO2 ;Internal RC oscillator, no clock-out CONFIG PLLCFG = OFF CONFIG IESO = OFF ;Disabled CONFIG PWRTEN = OFF ;Disabled, because incompatible with ICD3 (Ri-400) CONFIG BOREN = ON ;Controlled with SBOREN bit CONFIG BORV = 2 ;2.0V CONFIG BORPWR = MEDIUM ;BORMV set to medium power level CONFIG WDTEN = ON ;WDT controlled by SWDTEN bit setting CONFIG WDTPS = 128 ;1:128 CONFIG RTCOSC = SOSCREF ;RTCC uses SOSC CONFIG MCLRE = ON ;MCLR Enabled, RG5 Disabled CONFIG CCP2MX = PORTBE ;RE7-Microcontroller Mode/RB3-All other modes ;============================================================================= boot CODE global init_ostc init_ostc: banksel common ; Bank1 ;init oscillator movlw b'01110010' movwf OSCCON ; 16MHz INTOSC movlw b'00001000' movwf OSCCON2 ; Secondary Oscillator running movlw b'00000000' movwf OSCTUNE ; 4x PLL Disable (Bit6) - only works with 8 or 16MHz (=32 or 64MHz) bcf RCON,SBOREN ; Bown-Out off bcf RCON,IPEN ; Priority Interrupts off clrf CM1CON ; Disable banksel WDTCON movlw b'10000000' movwf WDTCON ; Setup Watchdog ; I/O Ports banksel 0xF16 ; Addresses, F16h through F5Fh, are also used by SFRs, but are not part of the Access RAM. clrf REFOCON ; No reference oscillator active on REFO pin clrf ODCON1 ; Disable Open Drain capability clrf ODCON2 ; Disable Open Drain capability clrf ODCON3 ; Disable Open Drain capability clrf CM2CON ; Disable clrf CM3CON ; Disable movlw b'11000000' ; ANSEL, AN7 and AN6 -> Analog inputs, PORTA is digital. movwf ANCON0 movlw b'00000111' ; ANSEL, AN8, AN9, AN10 -> Analog in movwf ANCON1 movlw b'00000010' ; ANSEL, AN17 -> Analog input movwf ANCON2 banksel common movlw b'00000000' ; 1= Input -> Data TFT_high movwf TRISA movlw b'00000000' ; Init port movwf PORTA movlw b'00000011' ; 1= Input, (RB0, RB1) -> Switches, RB2 -> Power_MCP, RB3 -> s8_npower, RB4 -> LED_green, RB5 -> /TFT_POWER movwf TRISB movlw b'00101000' ; Init port movwf PORTB movlw b'10011010' ; 1= Input, (RC0, RC1) -> SOSC, RC2 -> TFT_LED_PWM, (RC3,RC4) -> I²C, RC5 -> MOSI_MS5541, (RC6, RC7) -> UART1 movwf TRISC movlw b'00000000' ; Init port movwf PORTC movlw b'00100000' ; 1= Input, RD0 -> TFT_NCS, RD1 -> TFT_RS, RD2 -> TFT_NWR, RD3 -> TFT_RD, RD4 -> MOSI_Flash, RD5 -> MISO_Flash, RD6 -> CLK_Flash, RD7 -> TFT_NRESET movwf TRISD movlw b'00000000' ; Init port movwf PORTD movlw b'00000000' ; 1= Input, RE1 -> Power_IR, RE2 -> CS_MCP, RE3 -> LED_blue, RE4 -> power_sw1, RE5 -> Set to 1 for cR hardware movwf TRISE movlw b'00110001' ; Init port movwf PORTE movlw b'01111110' ; 1= Input, (RF1, RF2, RF3, RF4, RF5) -> Analog movwf TRISF movlw b'00000000' ; Init port movwf PORTF movlw b'00001110' ; 1= Input, <7:6> not implemented, RG0 -> TX3_PIEZO_CFG, RG2 -> RX2, RG3 -> AN17_RSSI, RG4 -> SOSC_OUT, RG5 -> /RESET movwf TRISG movlw b'00000001' ; Init port movwf PORTG movlw b'00000000' ; 1= Input -> Data TFT_low movwf TRISH movlw b'00000000' ; Init port movwf PORTH movlw b'10011011' ; 1= Input, RJ4 -> vusb_in, RJ5 -> power_sw2, RJ6 -> CLK_MS5541, RJ7 -> MISO_MS5541 movwf TRISJ movlw b'00100000' ; Init port movwf PORTJ ; Timer 0 movlw b'00000001' ; Timer0 with 1:4 prescaler ; movlw b'00001000' ; Timer0 with 1:1 prescaler movwf T0CON ; Timer 1 - Button hold-down timer movlw b'10001100' ; 32768Hz clock source, 1:1 Prescaler -> ; 30,51757813µs/bit in TMR1L:TMR1H movwf T1CON banksel 0xF16 ; Addresses, F16h through F5Fh, are also used by SFRs, but are not part of the Access RAM. ; RTCC movlw 0x55 movwf EECON2 movlw 0xAA movwf EECON2 bsf RTCCFG,RTCWREN ; Unlock sequence for RTCWREN bsf RTCCFG,RTCPTR1 bsf RTCCFG,RTCPTR0 bsf RTCCFG,RTCEN ; Module enable bsf RTCCFG,RTCOE ; Output enable movlw b'00000100' ; 32768Hz SOCS on RTCC pin (PORTG,4) Bit7-5: Pullups for Port D, E and J movwf PADCFG1 movlw b'11000100' movwf ALRMCFG ; 1 second alarm movlw d'1' movwf ALRMRPT ; Alarm repeat counter movlw 0x55 movwf EECON2 movlw 0xAA movwf EECON2 bcf RTCCFG,RTCWREN ; Lock sequence for RTCWREN banksel common ; A/D Converter movlw b'00011000' ; power off ADC, select AN6 movwf ADCON0 movlw b'00100000' ; 2.048V Vref+ movwf ADCON1 movlw b'10001101' ; Right justified movwf ADCON2 ;init serial port1 (TRISC6/7) movlw b'00001000' ; BRG16=1 movwf BAUDCON1 ; movlw b'00100100' ; BRGH=1, SYNC=0 ; movwf TXSTA1 movlw .34 ; SPBRGH:SPBRG = .34 : 114285 BAUD @ 16MHz (+0,79% Error to 115200 BAUD) movwf SPBRG1 ; SPBRGH:SPBRG = .207 : 19230 BAUD @ 16MHz (-0,16% Error to 19200 BAUD) clrf SPBRGH1 ; ; movlw b'10010000' ; movwf RCSTA1 clrf RCSTA1 clrf TXSTA1 ; UART disable bcf PORTC,6 ; TX hard to GND ;init serial port2 (TRISG2) banksel BAUDCON2 movlw b'00100000' ; BRG16=0 ; inverted for IR movwf BAUDCON2 movlw b'00100000' ; BRGH=0, SYNC=0 movwf TXSTA2 movlw .102 ; SPBRGH:SPBRG = .102 : 2403 BAUD @ 16MHz movwf SPBRG2 clrf SPBRGH2 movlw b'10010000' movwf RCSTA2 banksel common ; Timer3 for IR-RX Timeout clrf T3GCON ; Reset Timer3 Gate Control register ; movlw b'10001101' ; 1:1 Prescaler -> 2seconds@32768Hz, not synced movlw b'10001001' ; 1:1 Prescaler -> 2seconds@32768Hz, synced ; 30,51757813µs/bit in TMR3L:TMR3H movwf T3CON ; SPI Module(s) ; SPI2: External Flash movlw b'00110000' movwf SSP2CON1 movlw b'00000000' movwf SSP2STAT ; ->0,25MHz Bit clock @1MHz mode (Eco) ; -> 4MHz Bit clock @16MHz mode (Normal) ; -> 16MHz Bit clock @64MHz mode (Fastest) ; MSSP1 Module: I2C Master movlw b'00101000' ; I2C Master Mode movwf SSP1CON1 movlw b'00000000' movwf SSP1CON2 movlw 0x27 movwf SSP1ADD ; 100kHz @ 16MHz Fosc ; PWM Module(s) ; PWM1 for LED dimming movlw b'00001100' movwf CCP1CON movlw b'00000001' movwf PSTR1CON ; Pulse steering disabled movlw d'255' movwf PR2 ; Period ; 255 is max brightness (300mW) clrf CCPR1L ; Duty cycle clrf CCPR1H ; Duty cycle movlw T2CON_NORMAL movwf T2CON ; Timer5 for ISR-independent wait routines clrf T5GCON ; Reset Timer5 Gate Control register ; movlw b'10001101' ; 1:1 Prescaler -> 2seconds@32768Hz, not synced movlw b'10001001' ; 1:1 Prescaler -> 2seconds@32768Hz, synced ; 30,51757813µs/bit in TMR5L:TMR5H movwf T5CON ; Timer7 for 62,5ms Interrupt (Sensor states) banksel 0xF16 ; Addresses, F16h through F5Fh, are also used by SFRs, but are not part of the Access RAM. clrf T7GCON ; Reset Timer7 Gate Control register ; movlw b'10001101' ; 1:1 Prescaler -> 2seconds@32768Hz, not synced movlw b'10001001' ; 1:1 Prescaler -> 2seconds@32768Hz, synced movwf T7CON clrf TMR7L movlw .248 movwf TMR7H ; -> Rollover after 2048 cycles -> 62,5ms banksel common ; Interrupts movlw b'11010000' movwf INTCON movlw b'00001000' ; BIT7=1: Pullup for PORTB disabled movwf INTCON2 movlw b'00000000' movwf INTCON3 movlw b'00000001' ; Bit0: TMR1 movwf PIE1 movlw b'00000010' ; Bit1: TMR3 movwf PIE2 movlw b'00000000' ; Bit1: TMR5 movwf PIE5 movlw b'00100001' ; Bit0: RTCC, Bit5: UART2 movwf PIE3 movlw b'00001000' ; Bit3: TMR7 movwf PIE5 bsf power_sw1 btfss power_sw1 bra $-4 bsf power_sw2 btfss power_sw2 bra $-4 movlw d'2' movwf speed_setting ; Normal return ;============================================================================= global speed_eco speed_eco: movlw d'1' movff WREG,speed_setting ; Bank-independent ; Done in ISR return ;============================================================================= global speed_normal speed_normal: movlw d'2' movff WREG,speed_setting ; Bank-independent ; Done in ISR return ;============================================================================= global speed_fastest speed_fastest: movlw d'3' movff WREG,speed_setting ; Bank-independent ; Done in ISR return ;============================================================================= END