-
Notifications
You must be signed in to change notification settings - Fork 0
/
hal_usb.c
147 lines (122 loc) · 3.65 KB
/
hal_usb.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/**
* @file hal_usb.c
*
* Copyright 2008 Texas Instruments, Inc.
***************************************************************************/
#include <msp430x54x.h>
#include "hal_usb.h"
#ifdef USE_IRQ_RX
static char halUsbReceiveBuffer[255];
static unsigned char bufferSize=0;
#endif
/**********************************************************************//**
* @brief Initializes the serial communications peripheral and GPIO ports
* to communicate with the TUSB3410.
*
* @param none
*
* @return none
**************************************************************************/
void halUsbInit(void)
{
#ifdef USE_IRQ_RX
volatile unsigned char i;
for (i = 0;i < 255; i++){
halUsbReceiveBuffer[i]='\0';
}
bufferSize = 0;
#endif
USB_PORT_SEL |= USB_PIN_RXD + USB_PIN_TXD;
USB_PORT_DIR |= USB_PIN_TXD;
USB_PORT_DIR &= ~USB_PIN_RXD;
UCA0CTL1 = UCSWRST; //Reset State
UCA0CTL0 = UCMODE_0;
// set 115200 baud
UCA0CTL1 |= UCSSEL_2;
UCA0BR0 = 138 % 256; // 8Mhz/57600=138
UCA0BR1 = 138 / 256;
UCA0ABCTL = 0;
UCA0MCTL = (7 << 1);
UCA0CTL1 &= ~UCSWRST;
// UCA0IE |= UCRXIE; //enable receive interrupts
// __bis_SR_register(GIE); // Enable Interrupts
}
/**********************************************************************//**
* @brief Disables the serial communications peripheral and clears the GPIO
* settings used to communicate with the TUSB3410.
*
* @param none
*
* @return none
**************************************************************************/
void halUsbShutDown(void)
{
UCA0IE &= ~UCRXIE;
UCA0CTL1 = UCSWRST; //Reset State
USB_PORT_SEL &= ~( USB_PIN_RXD + USB_PIN_TXD );
USB_PORT_DIR |= USB_PIN_TXD;
USB_PORT_DIR |= USB_PIN_RXD;
USB_PORT_OUT &= ~(USB_PIN_TXD + USB_PIN_RXD);
}
/**********************************************************************//**
* @brief Sends a character over UART to the TUSB3410.
*
* @param character The character to be sent.
*
* @return none
**************************************************************************/
void halUsbSendChar(char character)
{
while (!(UCA0IFG & UCTXIFG));
UCA0TXBUF = character;
}
char halUsbRecvChar(){
while (!(UCA0IFG & UCRXIFG));
return UCA0RXBUF;
}
/**********************************************************************//**
* @brief Sends a string of characters to the TUSB3410
*
* @param string[] The array of characters to be transmit to the TUSB3410.
*
* @param length The length of the string.
*
* @return none
**************************************************************************/
void halUsbSendString(char string[], unsigned char length)
{
volatile unsigned char i;
for (i=0; i < length; i++)
halUsbSendChar(string[i]);
}
#ifdef USE_IRQ_RX
/************************************************************************/
interrupt(USCI_A1_VECTOR) USCI_A1_ISR (void)
{
halUsbReceiveBuffer[bufferSize++] = UCA0RXBUF;
__bic_SR_register_on_exit(LPM3_bits);
}
#endif
// provide putchar used by printf
/*
// ATRABER: DO NOT USE as it collides with standard library of MSP430 compiler
int putchar(int c){
halUsbSendChar(c);
return 1;
}*/
#include <stdio.h>
#include <string.h>
int fputc(int _c, register FILE *_fp)
{
if(_c == '\n')
halUsbSendChar('\r');
halUsbSendChar(_c);
return((unsigned char)_c);
}
int fputs(const char *_ptr, register FILE *_fp)
{
unsigned int i, len;
len = strlen(_ptr);
halUsbSendString(_ptr, len);
return len;
}