void oledRefresh() { static uint8_t s[3] = {OLED_SETLOWCOLUMN | 0x00, OLED_SETHIGHCOLUMN | 0x00, OLED_SETSTARTLINE | 0x00}; // draw triangle in upper right corner if (is_debug_mode) { OLED_BUFTGL(OLED_WIDTH - 5, 0); OLED_BUFTGL(OLED_WIDTH - 4, 0); OLED_BUFTGL(OLED_WIDTH - 3, 0); OLED_BUFTGL(OLED_WIDTH - 2, 0); OLED_BUFTGL(OLED_WIDTH - 1, 0); OLED_BUFTGL(OLED_WIDTH - 4, 1); OLED_BUFTGL(OLED_WIDTH - 3, 1); OLED_BUFTGL(OLED_WIDTH - 2, 1); OLED_BUFTGL(OLED_WIDTH - 1, 1); OLED_BUFTGL(OLED_WIDTH - 3, 2); OLED_BUFTGL(OLED_WIDTH - 2, 2); OLED_BUFTGL(OLED_WIDTH - 1, 2); OLED_BUFTGL(OLED_WIDTH - 2, 3); OLED_BUFTGL(OLED_WIDTH - 1, 3); OLED_BUFTGL(OLED_WIDTH - 1, 4); } gpio_clear(OLED_CS_PORT, OLED_CS_PIN); // SPI select SPISend(SPI_BASE, s, 3); gpio_set(OLED_CS_PORT, OLED_CS_PIN); // SPI deselect gpio_set(OLED_DC_PORT, OLED_DC_PIN); // set to DATA gpio_clear(OLED_CS_PORT, OLED_CS_PIN); // SPI select SPISend(SPI_BASE, _oledbuffer, sizeof(_oledbuffer)); gpio_set(OLED_CS_PORT, OLED_CS_PIN); // SPI deselect gpio_clear(OLED_DC_PORT, OLED_DC_PIN); // set to CMD // return it back if (is_debug_mode) { OLED_BUFTGL(OLED_WIDTH - 5, 0); OLED_BUFTGL(OLED_WIDTH - 4, 0); OLED_BUFTGL(OLED_WIDTH - 3, 0); OLED_BUFTGL(OLED_WIDTH - 2, 0); OLED_BUFTGL(OLED_WIDTH - 1, 0); OLED_BUFTGL(OLED_WIDTH - 4, 1); OLED_BUFTGL(OLED_WIDTH - 3, 1); OLED_BUFTGL(OLED_WIDTH - 2, 1); OLED_BUFTGL(OLED_WIDTH - 1, 1); OLED_BUFTGL(OLED_WIDTH - 3, 2); OLED_BUFTGL(OLED_WIDTH - 2, 2); OLED_BUFTGL(OLED_WIDTH - 1, 2); OLED_BUFTGL(OLED_WIDTH - 2, 3); OLED_BUFTGL(OLED_WIDTH - 1, 3); OLED_BUFTGL(OLED_WIDTH - 1, 4); } }
/* **************************************************************************** calculates size of card from CSD (extension by Martin Thomas, inspired by code from Holger Klabunde) CSD version 2.0 code by Magnus Karlsson */ int BlockDevGetSize(U32 *pdwDriveSize) { U8 cardresp, i, by; U8 iob[16]; U32 c_size, blocks; U16 c_size_mult, read_bl_len; Command(CMD_READCSD, 0); do { cardresp = Resp8b(); } while (cardresp != 0xFE); rprintf("CSD:"); for (i = 0; i < 16; i++) { iob[i] = SPISend(0xFF); rprintf(" %02x", iob[i]); } rprintf("\n"); SPISend(0xff); SPISend(0xff); if ((iob[0] & 0x80) == 0x80) { return -1; // Illegal CSD version data } else if ((iob[0] & 0x40) == 0) // CSD version 1.0 { c_size = iob[6] & 0x03; // bits 1..0 c_size <<= 10; c_size += (U16) iob[7] << 2; c_size += iob[8] >> 6; by = iob[5] & 0x0F; read_bl_len = 1 << by; by = iob[9] & 0x03; by <<= 1; by += iob[10] >> 7; c_size_mult = 1 << (2 + by); blocks = ((c_size + 1) * (U32) c_size_mult *(U32) read_bl_len) / 512; }
void cuto(int chn) { //SPI output = 0 MST_Data = 0; MST_Data |= 0x8000; SPISend(MST_Data); //cut IO P3OUT &= ~BIT6; P3OUT &= ~BIT5; P1OUT |= BIT5+BIT4; P1OUT &= ~BIT3; P1OUT &= ~BIT2; //connecti IO switch(chn) { case 1: { P3OUT &= ~BIT6; P3OUT |= BIT5; P1OUT &= ~BIT3; P1OUT |= BIT2; P1OUT &= ~BIT5; P1OUT &= ~BIT4; } break; case 2: { P3OUT |= BIT6; P3OUT &= ~BIT5; P1OUT |= BIT3; P1OUT &= ~BIT2; P1OUT &= ~BIT5; P1OUT &= ~BIT4; } break; case 3: { P3OUT |= BIT6; P3OUT |= BIT5; P1OUT |= BIT3; P1OUT |= BIT2; P1OUT &= ~BIT5; P1OUT &= ~BIT4; } break; default: break; } //OLED }
void oledRefresh() { static const uint8_t s[3] = {OLED_SETLOWCOLUMN | 0x00, OLED_SETHIGHCOLUMN | 0x00, OLED_SETSTARTLINE | 0x00}; // draw triangle in upper right corner oledInvertDebugLink(); gpio_clear(OLED_CS_PORT, OLED_CS_PIN); // SPI select SPISend(SPI_BASE, s, 3); gpio_set(OLED_CS_PORT, OLED_CS_PIN); // SPI deselect gpio_set(OLED_DC_PORT, OLED_DC_PIN); // set to DATA gpio_clear(OLED_CS_PORT, OLED_CS_PIN); // SPI select SPISend(SPI_BASE, _oledbuffer, sizeof(_oledbuffer)); gpio_set(OLED_CS_PORT, OLED_CS_PIN); // SPI deselect gpio_clear(OLED_DC_PORT, OLED_DC_PIN); // set to CMD // return it back oledInvertDebugLink(); }
void oledInit() { static uint8_t s[25] = { OLED_DISPLAYOFF, OLED_SETDISPLAYCLOCKDIV, 0x80, OLED_SETMULTIPLEX, 0x3F, // 128x64 OLED_SETDISPLAYOFFSET, 0x00, OLED_SETSTARTLINE | 0x00, OLED_CHARGEPUMP, 0x14, OLED_MEMORYMODE, 0x00, OLED_SEGREMAP | 0x01, OLED_COMSCANDEC, OLED_SETCOMPINS, 0x12, // 128x64 OLED_SETCONTRAST, 0xCF, OLED_SETPRECHARGE, 0xF1, OLED_SETVCOMDETECT, 0x40, OLED_DISPLAYALLON_RESUME, OLED_NORMALDISPLAY, OLED_DISPLAYON }; gpio_clear(OLED_DC_PORT, OLED_DC_PIN); // set to CMD gpio_set(OLED_CS_PORT, OLED_CS_PIN); // SPI deselect // Reset the LCD gpio_set(OLED_RST_PORT, OLED_RST_PIN); delay(40); gpio_clear(OLED_RST_PORT, OLED_RST_PIN); delay(400); gpio_set(OLED_RST_PORT, OLED_RST_PIN); // init gpio_clear(OLED_CS_PORT, OLED_CS_PIN); // SPI select SPISend(SPI_BASE, s, 25); gpio_set(OLED_CS_PORT, OLED_CS_PIN); // SPI deselect oledClear(); oledRefresh(); }
static U8 Resp8b(void) { U8 i; U8 resp; /* Respone will come after 1 - 8 pings */ for (i = 0; i < 8; i++) { resp = SPISend(0xff); if (resp != 0xff) { return resp; } } return resp; }
int main(void) { // double Datav=123.4; str = a; int i; // char *str_1 = "abc" ; WDTCTL = WDTPW + WDTHOLD; // Stop WDT //Timer0 TA0CCTL0 = CCIE; // CCR0 interrupt enabled TA0CCR0 = 5000; TA0CTL = TASSEL_2 + MC_1 + TACLR; // SMCLK, upmode, clear TAR //GPIO P4DIR |= BIT7; // Set P4.7 to output direction P1DIR |= BIT0; // Set P1.0 to output direction P1DIR |= 0x3C; P3DIR |= BIT5+BIT6; P1OUT |= BIT5+BIT4; //buttom P2REN |= BIT1; P2OUT |= BIT1; P2IES |= BIT1; P2IFG &= ~BIT1; P2IE |= BIT1; P1REN |= BIT1; P1OUT |= BIT1; P1IES |= BIT1; P1IFG &= ~BIT1; P1IE |= BIT1; //IIC OLED_Init(); OLED_ShowStr(0,2,"Please Set:",99,2); // Delay_ms(100); // OLED_Clear(0x00); //end of IIC DMAInit(); ADCInit(); //启动需要在增加 enable //UART UART_Init(UARTA0); //bluetooth UART_Init(UARTB0); //SPI UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt // UCB0IE |= UCRXIE; // Enable USCI_B0 RX interrupt //SPI P2OUT |= BIT5; // reset slave P2OUT &= ~BIT5; // Now with SPI signals initialized, for(i=50;i>0;i--); // Wait for slave to initialize MST_Data = 0x8FFF; // Initialize data values SLV_Data = 0x00; // while (!(UCB0IFG&UCTXIFG)); // USCI_B0 TX buffer ready? //end of SPI __bis_SR_register(LPM3_bits + GIE); // Enter LPM0, enable interrupts while(1) { // OLED_ShowStr(12,2,(unsigned char *)F2S(Datav,tstr),6,1); //6*8 // UartTX_Send("Done!\r\n",7); if(buttom_fct_flag != 0) { buttom_fct_stc_opt(); buttom_fct_flag = 0; } if(buttom_fct_flags != 0) { buttom_fct_stcs_opt(); buttom_fct_flags = 0; } // OLED_ShowStr(0,0,(unsigned char *)F2S(DMA_A1,tstr),8,1); //6*8 if(fct_stc_flag != 0) { fct_stc_flag = 0; fct_stc_opt(); } if(function!=0) // not off { ADC12CTL0 |= ADC12SC; // Start sampling/conversion } switch(function) { case 0: { // OLED_OFF(); __bis_SR_register(LPM3_bits + GIE); // Enter LPM3, interrupts enabled; } break; case 1: { if(mode == 0) { if(set_ack_flag == 1) { // OLED_ON(); // OLED_Clear(0x00); set_ack_flag = 0; MST_Data = (u16)(Datavin); MST_Data |= 0x8000; SPISend(MST_Data); OLED_ShowStr(0,1,"I:",2,1); //6*8 OLED_ShowStr(16,1,(unsigned char *)F2S(Datai,tstr),8,1); //6*8 OLED_ShowStr(0,2,"stalls:",7,1); //6*8 OLED_ShowStr(42,2,(unsigned char *)I2S(stalls,tstr),6,1); //6*8 } } else // current_pot { Datavin = (double)DMA_A1*4/3.3; MST_Data = (u16)(Datavin*4095/4); MST_Data |= 0x8000; SPISend(MST_Data); I_out = (double)DMA_A2*3.3/4095*10; OLED_ShowStr(0,2,"stalls:",7,1); //6*8 OLED_ShowStr(42,2,(unsigned char *)I2S(stalls,tstr),6,1); //6*8 // OLED_ShowStr(0,2,"I_out:",6,1); //6*8 // OLED_ShowStr(36,2,(unsigned char *)F2S(I_out,tstr),6,1); //6*8 if(!((Pre_A3 - ADC12MEM3)<40 | (ADC12MEM3 - Pre_A3)<40)) { OLED_ShowStr(24,6,(unsigned char *)F2S(ADC12MEM3,tstr),4,1); //6*8 } Pre_A3 = ADC12MEM3; } } break; case 2: { if(set_ack_flag == 1) { OLED_ON(); set_ack_flag = 0; } } break; case 3: //off { // OLED_OFF(); //shutdown the circuit __bis_SR_register(LPM3_bits + GIE); // Enter LPM3, interrupts enabled; } break; }//end of function switch; OLED_ShowStr(0,4,(unsigned char *)F2S(DMA_A0,tstr),4,1); //6*8 OLED_ShowStr(0,5,(unsigned char *)F2S(DMA_A1,tstr),4,1); //6*8 OLED_ShowStr(0,6,(unsigned char *)F2S(DMA_A2,tstr),4,1); //6*8 OLED_ShowStr(0,7,(unsigned char *)F2S(ADC12MEM3,tstr),4,1); //6*8 // Delay_ms(200); // if(strcmp(str_1,str)==0) // { // P1OUT |= BIT0; // UartTX_Send("Great!\r\n",8); // Delay_ms(200); // } // else P1OUT &= ~BIT0; } //end of while }
// Function Name: main // Author: Drew Schuster // Called by: runs on powerup // Purpose: Initializes registers and peripherals. Handles volume changes // And updates to the display // Calling convention: is not called by any other function // Conditions at exit: No exit, infinite while loop // Date Started: March 14th // Update History: See Github repository at https://github.com/dr3wster/We-are-Wireless-Audio int main (void) { #ifdef BASE int lastVolume=-1; #endif SCS |= 1; //Enable fast GPIO #ifdef BASE volume=5; /* Enable and setup timer interrupt, start timer */ T0MR0 = 99; /* 0.025msec = 100-1 at 4.0 MHz*/ T0MCR = 3; /* Interrupt and Reset on MR0 */ T0TCR = 0; /* Timer0 Enable */ VICVectAddr4 = (unsigned long)T0_IRQHandler;/* Set Interrupt Vector */ VICVectCntl4 = 15; /* use it for Timer0 Interrupt */ VICIntEnable |= (1 << 4); /* Enable Timer0 Interrupt */ /* Enable and setup timer interrupt (useful for communicating with display)*/ T1MR0 = 3999; /* 1msec = 4000-1 at 4.0 MHz*/ T1MCR = 3; /* Interrupt and Reset on MR0 */ T1TCR = 1; /* Timer1 Enable */ VICVectAddr5 = (unsigned long)T0_IRQHandler2;/* Set Interrupt Vector */ VICVectCntl5 = 16; /* use it for Timer1 Interrupt */ VICIntEnable |= (1 << 5); /* Enable Timer1 Interrupt */ #endif /* Power enable, Setup pin, enable and setup AD converter interrupt */ PCONP |= (1 << 12); /* Enable power to AD block */ PINSEL1 = 0x00204000; /* AD0.0 pin function select */ AD0INTEN = (1 << 0); /* CH0 enable interrupt */ AD0CR = 0x00200301; /* Power up, PCLK/4, sel AD0.0 */ #ifdef BASE VICVectAddr18 = (unsigned long)ADC_IRQHandler;/* Set Interrupt Vector */ VICVectCntl18 = 14; /* use it for ADC Interrupt */ VICIntEnable |= (1 << 18); /* Enable ADC Interrupt */ #endif init_serial(); /* Init UART */ #ifdef BASE /*Initialize the display*/ #ifdef DEVBOARD // development board doesn't have display connected #else display_init(); #endif #endif #ifdef BASE /* Let's initialize the voice recognition pins: p1.20-24 */ #ifdef DEVBOARD PINSEL4 &= 0xFFFC03FF; #else //p1[20-24] PINSEL3 &= 0xFFFC00FF; FIO3DIR = 0; //Pushbuttons p1[15-17] PINSEL2 &= 0x3FFFFFFF; PINSEL3 &= 0xFFFFFFF0; FIO1DIR &= 0xFFFC7FFF; #endif T0TCR = 1; /* Timer0 Enable (Start A-D conversions!) */ #endif #ifdef REMOTE //Set pin P3[26] to high (for amplifier) PINSEL4 &= 0x0; FIO3DIR = 1 << 26 ; //pin configured as output FIO3SET = 1 << 26; #endif #ifdef BASE //Initialize the potentiometer SPIWRData[0]=0x24; SPIWRData[1]=0x00; FIO0CLR = 1 << 16; SPISend(SPIWRData, 0x2); FIO0SET = 1 << 16; SPIWRData[0]=0x1C; SPIWRData[1]=0x03; FIO0CLR = 1 << 16; SPISend(SPIWRData, 0x2); FIO0SET = 1 << 16; SPIWRData[0]=0x05; SPIWRData[1]=0x40; FIO0CLR = 1 << 16; SPISend(SPIWRData, 0x2); FIO0SET = 1 << 16; #endif while (1) { /* Loop forever */ #ifdef BASE /* Audio Code*/ if (volume == 5) { out = AD_last>>2; } else if (volume == 4)