ossicubesat
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
ossicubesat [2012/05/06 06:54] – donghee | ossicubesat [2018/07/18 14:10] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 53: | Line 53: | ||
- 출력: PAYLOAD에 I2C로 메시지 보내기 | - 출력: PAYLOAD에 I2C로 메시지 보내기 | ||
1. 메시지 예약 삭제 | 1. 메시지 예약 삭제 | ||
+ | |||
+ | |||
+ | |||
+ | read button and led on | ||
+ | |||
+ | # | ||
+ | |||
+ | void main (void) | ||
+ | { | ||
+ | WDTCTL = WDTPW + WDTHOLD; | ||
+ | P6DIR |= BIT0; | ||
+ | P1OUT = BIT2; //pull up | ||
+ | |||
+ | while(1) | ||
+ | { | ||
+ | |||
+ | if((P6IN & BIT1) == 0) { // LOW? | ||
+ | P6OUT |= BIT0; | ||
+ | } else { | ||
+ | P6OUT &= ~BIT0; | ||
+ | } | ||
+ | } | ||
+ | } | ||
#### LED: 모스코드 | #### LED: 모스코드 | ||
Line 324: | Line 347: | ||
---- | ---- | ||
port 1,2,3 이 가능 . | port 1,2,3 이 가능 . | ||
+ | |||
+ | |||
Line 504: | Line 529: | ||
Setting I2CEN = 0 has the following effects: | Setting I2CEN = 0 has the following effects: | ||
+ | |||
- I2C communication stops | - I2C communication stops | ||
- SDA and SCL are high impedance | - SDA and SCL are high impedance | ||
Line 512: | Line 538: | ||
- I2COA, I2CSA, I2CIE, I2CIFG, and I2CIV registers are unchanged | - I2COA, I2CSA, I2CIE, I2CIFG, and I2CIV registers are unchanged | ||
- | + | When I2RM=1, I2CSTP must be set before the last I2CDR value is written. Othwerwise, correct STOP generation will not occur. | |
- | *When I2RM=1, I2CSTP must be set before the last I2CDR value | + | |
- | is written. Othwerwise, correct STOP generation will not occur. | + | |
RXRDYIFG | RXRDYIFG | ||
- | Receive ready interrupt/ | + | Receive ready interrupt/ |
- | has received new data. RXRDYIFG is automatically cleared when | + | I2CDR is read and the receive buffer is empty. A receiver overrun is indicated if bit I2CRXOVR = 1. RXRDYIFG is used in receive mode |
- | I2CDR is read and the receive buffer is empty. A receiver overrun is | + | |
- | indicated if bit I2CRXOVR = 1. RXRDYIFG is used in receive mode | + | |
only. | only. | ||
TXRDYIFG | TXRDYIFG | ||
- | Transmit ready interrupt/ | + | Transmit ready interrupt/ |
- | is ready for new transmit data (master transmit mode) or when | + | another master is requesting data (slave transmit mode). TXRDYIFG is automatically cleared when I2CDR and the transmit buffer are full. |
- | another master is requesting data (slave transmit mode). TXRDYIFG | + | A transmit underflow is indicated if I2CTXUDF = 1. Unused in receive mode. |
- | is automatically cleared when I2CDR and the transmit buffer are full. | + | |
- | A transmit underflow is indicated if I2CTXUDF = 1. Unused in receive | + | |
- | mode. | + | |
eeprom | eeprom | ||
Line 1140: | Line 1159: | ||
uart to 7020 | uart to 7020 | ||
- | 음 그런데 morse 신호 처음 부분이 잘린다. | ||
main.c | main.c | ||
Line 1235: | Line 1253: | ||
rc.c | rc.c | ||
+ | |||
# | # | ||
Line 1350: | Line 1369: | ||
morse.c | morse.c | ||
+ | |||
#include " | #include " | ||
#include " | #include " | ||
Line 1432: | Line 1452: | ||
} | } | ||
} | } | ||
+ | |||
+ | ====== 7021-n ====== | ||
+ | |||
+ | 4k일때는 잘되는것 같은데, 9.6k 일때 핀 인터럽트가 밀리는것 같다. | ||
+ | |||
+ | # | ||
+ | #include " | ||
+ | #include " | ||
+ | |||
+ | char message[255]; | ||
+ | //char _message[255] = {' | ||
+ | |||
+ | char _message[255] = {' | ||
+ | |||
+ | uint8_t step = 0; | ||
+ | uint8_t sending = 0; | ||
+ | int i =7; | ||
+ | int m =0; | ||
+ | |||
+ | void initUart() { | ||
+ | P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD | ||
+ | ME1|= UTXE0 + URXE0; | ||
+ | UCTL0 |= CHAR; // 8-bit character | ||
+ | UTCTL0 |= SSEL0; | ||
+ | UBR00 = 0x03; // 32k/9600 - 3.41 | ||
+ | UBR10 = 0x00; // | ||
+ | UMCTL0 = 0x4A; // Modulation | ||
+ | UCTL0 &= ~SWRST; | ||
+ | IE1 |= URXIE0; | ||
+ | } | ||
+ | |||
+ | void init_txrx_interrupt() | ||
+ | { | ||
+ | P1OUT = BIT2; //pull up | ||
+ | P1IE |= BIT2; // interrupt enable | ||
+ | P1IES |= BIT2; // interrupt hi/lo falling edge | ||
+ | //P1IES &= ~BIT2; // interrupt lo/hi edge | ||
+ | P1IFG &= ~BIT2; // P1.2 IFG cleared just in case | ||
+ | |||
+ | P5DIR |= BIT0; | ||
+ | |||
+ | _EINT(); | ||
+ | } | ||
+ | |||
+ | void main(void) | ||
+ | { | ||
+ | volatile unsigned int i; | ||
+ | volatile unsigned char x; | ||
+ | WDTCTL = WDTPW + WDTHOLD; | ||
+ | P6DIR |= 0x01; | ||
+ | initUart(); | ||
+ | init7021_n(); | ||
+ | init_txrx_interrupt(); | ||
+ | |||
+ | // // _BIS_SR(LPM0_bits + GIE); // Enter LPM3 w/ interrupt | ||
+ | |||
+ | _EINT(); | ||
+ | // | ||
+ | step = 10; | ||
+ | | ||
+ | |||
+ | // | ||
+ | // | ||
+ | // ascii(_message[i]); | ||
+ | // } | ||
+ | // } | ||
+ | |||
+ | while (1) { | ||
+ | if (sending == 1) { | ||
+ | UCTL0 &= ~CHAR; | ||
+ | |||
+ | InitI2C(); | ||
+ | |||
+ | for(i=0; i < step-1;i++ ) { | ||
+ | x= EEPROM_ByteWrite(i, | ||
+ | EEPROM_AckPolling(); | ||
+ | } | ||
+ | |||
+ | for(i=0; i < step-1;i++ ) { | ||
+ | x = EEPROM_RandomRead(i); | ||
+ | ascii(x); | ||
+ | } | ||
+ | step=0; | ||
+ | sending=0; | ||
+ | |||
+ | // | ||
+ | UCTL0 &= ~I2C; //Clear I2C, SYNC, and I2CEN (CLR.B | ||
+ | UCTL0 &= ~SYNC; | ||
+ | UCTL0 &= ~I2CEN; | ||
+ | |||
+ | UCTL0 |= SWRST; | ||
+ | |||
+ | initUart(); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | #pragma vector=USART0RX_VECTOR | ||
+ | __interrupt void usart0_rx (void) | ||
+ | { | ||
+ | |||
+ | while (!(IFG1 & UTXIFG0)); | ||
+ | TXBUF0 = RXBUF0; | ||
+ | message[step] = RXBUF0; | ||
+ | |||
+ | _EINT(); | ||
+ | |||
+ | step++; | ||
+ | if (RXBUF0 == 13) // CR | ||
+ | { | ||
+ | //P6OUT ^= 0x01; | ||
+ | sending = 1; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // Port 1 interrupt service routine | ||
+ | #pragma vector=PORT1_VECTOR | ||
+ | __interrupt void Port_1(void) | ||
+ | { | ||
+ | //P6OUT ^= BIT0; // Toggle LED at P6.0 | ||
+ | //P5OUT ^= BIT0; // Toggle LED at P5.0 | ||
+ | |||
+ | if(_message[m] & (1<< | ||
+ | P5OUT |= BIT0; | ||
+ | } else { | ||
+ | P5OUT &= ~BIT0; | ||
+ | } | ||
+ | |||
+ | i--; | ||
+ | |||
+ | if (i < 0){i = 7;m++;}; | ||
+ | if (m >= 12){m = 0; }; | ||
+ | |||
+ | P1IFG &= ~BIT2; // P1.2 IFG cleared | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | ##### Transfer Frames Format | ||
+ | |||
+ | AX.25 | ||
+ | |||
+ | |||
+ | 할일 | ||
+ | |||
+ | - Callsign 받기 | ||
+ | |||
+ | |||
+ | |||
+ | ##### I2C msp430 communication | ||
+ | |||
+ | |||
+ | master | ||
+ | |||
+ | led 6.0 | ||
+ | button 6.1 | ||
+ | |||
+ | # | ||
+ | void delay (void); | ||
+ | char TXData = 0; | ||
+ | |||
+ | void main (void) | ||
+ | { | ||
+ | WDTCTL = WDTPW + WDTHOLD; | ||
+ | |||
+ | P3SEL |= 0x0A; // Select I2C pins | ||
+ | U0CTL |= I2C + SYNC; // Recommended init procedure | ||
+ | U0CTL &= ~I2CEN; | ||
+ | I2CTCTL |= I2CSSEL1 + I2CTRX; | ||
+ | I2CNDAT = 0x03; // Write Three bytes | ||
+ | I2CSA = 0x0048; | ||
+ | U0CTL |= I2CEN; | ||
+ | |||
+ | U0CTL |= MST; // Master mode | ||
+ | I2CTCTL |= I2CSTT + I2CSTP; | ||
+ | while ((I2CIFG & TXRDYIFG) == 0); // Wait for transmitter to be ready | ||
+ | I2CDRB = TXData; | ||
+ | while ((I2CIFG & TXRDYIFG) == 0); // Wait for transmitter to be ready | ||
+ | I2CDRB = TXData; | ||
+ | while ((I2CIFG & TXRDYIFG) == 0); // Wait for transmitter to be ready | ||
+ | |||
+ | while(1) | ||
+ | { | ||
+ | |||
+ | if((P6IN & BIT1) == 0) { // LOW? | ||
+ | I2CDRB = 1; | ||
+ | P6OUT |= BIT0; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | slave | ||
+ | |||
+ | # | ||
+ | |||
+ | char RXData = 0; | ||
+ | |||
+ | void main (void) | ||
+ | { | ||
+ | WDTCTL = WDTPW + WDTHOLD; | ||
+ | P6DIR |= BIT0; | ||
+ | P6OUT &= ~BIT0; | ||
+ | |||
+ | P3SEL |= 0x0A; // Select I2C pins | ||
+ | U0CTL |= I2C + SYNC; // Recommended init procedure | ||
+ | U0CTL &= ~I2CEN; | ||
+ | I2CTCTL |= I2CSSEL1; | ||
+ | I2COA = 0x0048; | ||
+ | I2CIE = RXRDYIE; | ||
+ | U0CTL |= I2CEN; | ||
+ | |||
+ | _BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt | ||
+ | while(1){ | ||
+ | if (RXData !=0) | ||
+ | P6OUT |= BIT0; | ||
+ | else | ||
+ | P6OUT &= ~BIT0; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | // Common ISR for I2C Module | ||
+ | #pragma vector=USART0TX_VECTOR | ||
+ | __interrupt void I2C_ISR(void) | ||
+ | { | ||
+ | switch( I2CIV ) | ||
+ | { | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | case 10: // Receive Ready | ||
+ | RXData = I2CDRB; | ||
+ | | ||
+ | | ||
+ | case 12: break; | ||
+ | case 14: break; | ||
+ | case 16: break; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | #### msp430 blink assembly | ||
+ | |||
+ | blink | ||
+ | |||
+ | ; | ||
+ | ; | ||
+ | ; | ||
+ | ; | ||
+ | ; ACLK = n/a, MCLK = SMCLK = default DCO ~ 800k | ||
+ | ; | ||
+ | ; MSP430x1xx | ||
+ | ; | ||
+ | ; / | ||
+ | ; | | | | ||
+ | ; --|RST | ||
+ | ; | | | ||
+ | ; | | ||
+ | ; | ||
+ | ; | ||
+ | ; Texas Instruments, | ||
+ | ; | ||
+ | ; Built with CCE for MSP430 Version: 1.00 | ||
+ | ; | ||
+ | .cdecls C, | ||
+ | |||
+ | ; | ||
+ | .text ; Progam Start | ||
+ | ; | ||
+ | RESET | ||
+ | StopWDT | ||
+ | SetupP1 | ||
+ | ; | ||
+ | Mainloop | ||
+ | Wait mov.w # | ||
+ | L1 dec.w | ||
+ | jnz | ||
+ | jmp | ||
+ | ; | ||
+ | ; | ||
+ | ; | ||
+ | ; | ||
+ | .sect " | ||
+ | .short | ||
+ | |||
+ | .end | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
</ | </ |
ossicubesat.1336287256.txt.gz · Last modified: 2018/07/18 14:09 (external edit)