blob: d2b2090053afb5e7444658c60ee0393c7b607956 [file] [log] [blame]
/*
* Copyright (c) 2003, Adam Dunkels.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This file is part of the Contiki desktop environment
*
* $Id: msp430.c,v 1.3 2003/11/27 15:58:05 adamdunkels Exp $
*
*/
#include <io.h>
#include <signal.h>
#include "ctk.h"
#include "ctk-draw.h"
#include "ctk-vncserver.h"
#include "dispatcher.h"
#include "uip_main.h"
#include "uip.h"
#include "uip_arp.h"
#include "resolv.h"
#include "webserver.h"
#include "program-handler.h"
#include "about-dsc.h"
#include "netconf-dsc.h"
#include "processes-dsc.h"
#include "www-dsc.h"
#include "webserver-dsc.h"
#include "sensorview-dsc.h"
#include "sensors.h"
#include "uip.h"
#include "uip_arp.h"
#include "rs232.h"
void slip_drv_init(char *arg);
#define INTERVAL_5MS 52288U // 12288 cycles @ 2,4756MHz = 5 ms
static u16_t addr[2];
static ek_clock_t count;
interrupt(TIMERA1_VECTOR) timera1 (void) {
if(TAIV == 2) {
CCR1 += INTERVAL_5MS;
++count;
P2OUT ^= 4;
}
}
/*-----------------------------------------------------------------------------------*/
ek_clock_t
ek_clock(void)
{
return count;
}
/*-----------------------------------------------------------------------------------*/
void
beep(void)
{
unsigned int i, j;
/* Beep. */
P2OUT &= 0xFE;
P2OUT |= 8;
for(i = 0; i < 100; ++i) {
j = j * j;
}
P2OUT &= 0xf7;
P2OUT |= 0x01;
}
/*-----------------------------------------------------------------------------------*/
void
blink(void)
{
unsigned int i, j;
/* Blink yellow LED. */
P2OUT &= 0xFB;
for(i = 0; i < 140; ++i) {
j = j * j;
}
P2OUT |= 0x04;
}
/*-----------------------------------------------------------------------------------*/
void
rs232_print(char *cptr)
{
while(*cptr != 0) {
rs232_put(*cptr);
++cptr;
}
}
/*-----------------------------------------------------------------------------------*/
void
msp430_timer_init(void)
{
TACTL = TASSEL1 | TACLR | ID_3; // select SMCLK (2.4576MHz), clear TAR
// init ccr1 to create the 5 ms interval
TACCTL1 = CCIE; // CCR1 interrupt enabled, interrupt occurs when timer equals CCR1
TACCR1 = INTERVAL_5MS; // interrupt after 5ms
TACTL |= MC1; // Start Timer_A in continuous mode
eint(); /* Enable interrupts. */
}
/*-----------------------------------------------------------------------------------*/
void
msp430_init(void)
{
////////// Port 1 ////
P1SEL = 0x00;
P1DIR = 0x81; // Outputs: P10=IRSend, P17=RS232RTS
// Inputs: P11=Light, P12=IRRec, P13=PIR, P14=Vibration,
// P15=Clockalarm, P16=RS232CTS
P1OUT = 0x00;
////////// Port 2 ////
P2SEL = 0x00; // No Sels
P2DIR = 0x7F; // Outpus: P20..P23=Leds+Beeper, P24..P26=Poti
// Inputs: P27=Taster
P2OUT = 0x77;
////////// Port 3 ////
P3SEL = 0xE0; // Sels for P34..P37 to activate UART,
P3DIR = 0x5F; // Inputs: P30..P33=CON4, P35/P37=RXD Transceiver/RS232
// OutPuts: P36/P38=TXD Transceiver/RS232
P3OUT = 0xE0; // Output a Zero on P34(TXD Transceiver) and turn SELECT off when receiving!!!
////////// Port 4 ////
P4SEL = 0x00; // CON5 Stecker
P4DIR = 0xFF;
P4OUT = 0x00;
////////// Port 5 ////
P5SEL = 0x00; // P50/P51= Clock SDA/SCL, P52/P53/P54=EEPROM SDA/SCL/WP
P5DIR = 0xDA; // P56/P57=Transceiver CNTRL0/1
P5OUT = 0x0F;
////////// Port 6 ////
P6SEL = 0x00; // P60=Microphone, P61=PIR digital (same as P13), P62=PIR analog
P6DIR = 0x00; // P63=extern voltage, P64=battery voltage, P65=Receive power
P6OUT = 0x00;
/* Red led on */
P2OUT &= 0xfd;
beep();
}
/*-----------------------------------------------------------------------------------*/