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)