⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 MSP430F1610 generates a sine wave from a look up table using timer interrupt.
💻 C
字号:
#include  "includes.h"

unsigned int copy_DMA1CTL = 0;
unsigned int temp_i;
unsigned int value1 = 0, value2 = 4090;




//=========================INTERRUPTS  ==================================
//====================== TIMER A Interrupt===============================
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{ 
    TimerA_IntFlag++;
    if(globalProcessEnable)
    {

        // ==== BLOCK USED TO SEND A SIGNAL ALL THE TIME: LOOKUP TABLE =========
        if(sinus_cycle == 0)
            DAC12_1DAT = 20 + signal_1[DAC_sampleCounter];
        else
            DAC12_1DAT = 20 + 256 - signal_2[DAC_sampleCounter];
        DAC_sampleCounter ++;
        if(DAC_sampleCounter >= 128)
        {
            DAC_sampleCounter = 0;
            if(sinus_cycle == 0)    sinus_cycle = 1;
            else sinus_cycle = 0;
        }       
    }
//    P4OUT ^= 0xFF ; // TOGGLE ALL 
}
//====================== TIMER B Interrupt===============================
// Timer B interrupt service routine
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B (void)
{ 
    //TimerA_IntFlag++;
    //P4OUT ^= 0xFF ; // TOGGLE ALL
}
//====================== DMA Interrupt =========================================
#pragma vector = DACDMA_VECTOR
__interrupt void DACDMAISR(void)
{
    
    P4OUT ^= 0xFF ;       // TOGGLE ALL
    
    copy_DMA1CTL = DMA1CTL;
    //======= Is it DMA1 Int flag (New 512 samples block from PC arrived)
    if(copy_DMA1CTL & DMAIFG)
    {   
        DMA1CTL &= ~DMAIFG;             // Clear DMA1 interrupt flag
        DMA1CTL &= ~DMAIE;
        New_PC_Block_Trasfer = 1;
    }
}
//================== delay_time (int cycles) ============================
void delay_time(int cycles)
{   int i,j; i=j=0;
    for (i = cycles ; i > 0 ; i--) {   for (j = 5; j > 0; j--); }
}
//=======================================================================
//========================= main ()   ===================================
//=======================================================================
void main( void )
{
  int k = 0;
  unsigned int DMA_bytes = 0, tempo_sample = 0,tempo_test, tempo_i_main;
  char temp_char;
  unsigned char button_scan_result = 0;
  unsigned char temp_ARM_Muxes = 0;
  //------- INIT VARIABLES
  TimerA_IntFlag = SampleNumber = NrResetCommands = WatchdogCounter = 0;
  Button1_State = UNPRESSED;    Button2_State = UNPRESSED;

  config_all();

  // DMAs configuration:
  DMA_bytes = (PC_to_MSP_Nr_SAMPLES * 4); 
  config_DMA(DMA_RX_TX,10,DMA_bytes,test_string, MSP_TO_PC);


  //----- Enable Global Interrupts-----------------------------------------
  _EINT();
  
  delay_time(100000);
  
  for(temp_i = 0; temp_i < DAC_DMA_BLOCK_SIZE; temp_i++)
  {
        DAC12_Buffer_1[temp_i] = value1;
        DAC12_Buffer_2[temp_i] = value2;

        value1 = value1 + 10;
        value2 = value2 - 10;        
        if(value1 >= 4080)
        {   value1 = 0;
            value2 = 4090;
        }
  }  
//--- MAIN LOOP ---
  while(1)
  {
    // 1(>0 THEN 490uS),2(>1 THEN 1ms-1kHz),4(>3 THEN 2ms-500Hz),8(>7 THEN 4ms-250Hz)
    if(TimerA_IntFlag >= 40)
    { 
        TimerA_IntFlag=0;
        
        if(!globalProcessEnable)
            globalProcessEnable = 1;
        
        //P4OUT ^= 0xFF ;       // TOGGLE ALL


        //============== ASK FOR NEW PC BLOCK ==================================

        //-- When Timer Tick has sent all samples in current buffer, it sets
        //-- "DAC_buffer_used_changed", and MSP ask for 512 samples more from PC.
        if(DAC_buffer_used_changed)// 142 ms after requesting a block.
        {
            DAC_buffer_used_changed = 0;
            //-- Enable a new 512 samples block from PC:
            DMA1CTL = DMADSTINCR_3 + DMASBDB  +  DMAEN  + DMADT_4 + DMAIE  ;
            send_UART0(0xAA);
            
            //send_UART0(0xAA);
#ifdef VBnet_And_MSP_TEST
            P4OUT |= 0xFF ;       // TOGGLE ALL
#endif
        }
        //============== SYNC SAMPLES ==========================================
        if(New_PC_Block_Trasfer == 1)//
        {
            
//            P4OUT ^= 0xFF ;       // TOGGLE ALL

#ifdef VBnet_And_MSP_TEST            
            P4OUT &= 0x00 ;       // TOGGLE ALL
#endif            
            New_PC_Block_Trasfer = 0;
            if(DAC_buffer_used_number == 1)
                goodSamplesArrived = SynchSamples(2);                
            else 
                goodSamplesArrived = SynchSamples(1);
            // After this, new samples are in backup buffer.
        }
        
    }// End of  " if(TimerA_IntFlag > 0) "
  }// End of  " while(1) "
}// End of  " main() "


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -