Hi Everbody I am facing problem while transfering data from ADC to DAC in between i have used some buffer logic after execusion it is not working or suddenly stop copying from ADC but What i have tried is copying directly from ADC to DAC is working. Plz give me some suggestion which are most valuable. #include <ADuC7026.h> #define HALFBLOCKLENGTH 128 volatile short buffer_full_flag; short adc_dac_cursor_index; short adc_dac_buf_index; int adc_buf[HALFBLOCKLENGTH*3]; int dac_buf[HALFBLOCKLENGTH*3]; int adc_buf_cursor0; int adc_buf_cursor1; int dac_buf_cursor0; int dac_buf_cursor1; //void speech1(int *out_buf,int *in_buf,int *noise,int *temp_buf,int p); int in_buf[HALFBLOCKLENGTH*2]; int out_buf[HALFBLOCKLENGTH*2]; int temp_buf[HALFBLOCKLENGTH]; int noise[HALFBLOCKLENGTH*2]; const int whanning[] = { 0x0000, 0x0009, 0x0027, 0x0058, 0x009d, 0x00f6, 0x0162, 0x01e2, 0x0275, 0x031c, 0x03d6, 0x04a2, 0x0582, 0x0675, 0x077b, 0x0893, 0x09be, 0x0afb, 0x0c4a, 0x0daa, 0x0f1d, 0x10a0, 0x1235, 0x13db, 0x1592, 0x1759, 0x1930, 0x1b17, 0x1d0d, 0x1f13, 0x2128, 0x234b, 0x257d, 0x27bd, 0x2a0a, 0x2c64, 0x2ecc, 0x3140, 0x33c0, 0x364b, 0x38e3, 0x3b85, 0x3e31, 0x40e8, 0x43a9, 0x4673, 0x4945, 0x4c21, 0x4f04, 0x51ee, 0x54e0, 0x57d9, 0x5ad7, 0x5ddc, 0x60e6, 0x63f4, 0x6707, 0x6a1d, 0x6d37, 0x7054, 0x7374, 0x7695, 0x79b8, 0x7cdb, 0x7fff, 0x8324, 0x8647, 0x896a, 0x8c8b, 0x8fab, 0x92c8, 0x95e2, 0x98f8, 0x9c0b, 0x9f19, 0xa223, 0xa528, 0xa826, 0xab1f, 0xae11, 0xb0fb, 0xb3de, 0xb6ba, 0xb98c, 0xbc56, 0xbf17, 0xc1ce, 0xc47a, 0xc71c, 0xc9b4, 0xcc3f, 0xcebf, 0xd133, 0xd39b, 0xd5f5, 0xd842, 0xda82, 0xdcb4, 0xded7, 0xe0ec, 0xe2f2, 0xe4e8, 0xe6cf, 0xe8a6, 0xea6d, 0xec24, 0xedca, 0xef5f, 0xf0e2, 0xf255, 0xf3b5, 0xf504, 0xf641, 0xf76c, 0xf884, 0xf98a, 0xfa7d, 0xfb5d, 0xfc29, 0xfce3, 0xfd8a, 0xfe1d, 0xfe9d, 0xff09, 0xff62, 0xffa7, 0xffd8, 0xfff6, 0xffff, 0xfff6, 0xffd8, 0xffa7, 0xff62, 0xff09, 0xfe9d, 0xfe1d, 0xfd8a, 0xfce3, 0xfc29, 0xfb5d, 0xfa7d, 0xf98a, 0xf884, 0xf76c, 0xf641, 0xf504, 0xf3b5, 0xf255, 0xf0e2, 0xef5f, 0xedca, 0xec24, 0xea6d, 0xe8a6, 0xe6cf, 0xe4e8, 0xe2f2, 0xe0ec, 0xded7, 0xdcb4, 0xda82, 0xd842, 0xd5f5, 0xd39b, 0xd133, 0xcebf, 0xcc3f, 0xc9b4, 0xc71c, 0xc47a, 0xc1ce, 0xbf17, 0xbc56, 0xb98c, 0xb6ba, 0xb3de, 0xb0fb, 0xae11, 0xab1f, 0xa826, 0xa528, 0xa223, 0x9f19, 0x9c0b, 0x98f8, 0x95e2, 0x92c8, 0x8fab, 0x8c8b, 0x896a, 0x8647, 0x8324, 0x7fff, 0x7cdb, 0x79b8, 0x7695, 0x7374, 0x7054, 0x6d37, 0x6a1d, 0x6707, 0x63f4, 0x60e6, 0x5ddc, 0x5ad7, 0x57d9, 0x54e0, 0x51ee, 0x4f04, 0x4c21, 0x4945, 0x4673, 0x43a9, 0x40e8, 0x3e31, 0x3b85, 0x38e3, 0x364b, 0x33c0, 0x3140, 0x2ecc, 0x2c64, 0x2a0a, 0x27bd, 0x257d, 0x234b, 0x2128, 0x1f13, 0x1d0d, 0x1b17, 0x1930, 0x1759, 0x1592, 0x13db, 0x1235, 0x10a0, 0x0f1d, 0x0daa, 0x0c4a, 0x0afb, 0x09be, 0x0893, 0x077b, 0x0675, 0x0582, 0x04a2, 0x03d6, 0x031c, 0x0275, 0x01e2, 0x0162, 0x00f6, 0x009d, 0x0058, 0x0027, 0x0009 }; void My_IRQ_Function(void); // IRQ Funtion Prototype void Setup(void); void delay(int); void speech(int * out, int * in, int * temp, const short halfblocklength) { int k; for (k=0; k<halfblocklength; k++) { out[k] = in[k]+ temp[k]; temp[k] = in[k+halfblocklength]; } } int main (void) { int n; for (n=0; n<HALFBLOCKLENGTH*3; n++) { adc_buf[n] = n; dac_buf[n] = 0; } for (n=0; n<HALFBLOCKLENGTH*2; n++) { in_buf[n] = 0; out_buf[n] = 0; noise[n] = 0; } for (n=0; n<HALFBLOCKLENGTH; n++) { temp_buf[n] = 0; } buffer_full_flag = 0; adc_dac_buf_index = 0; adc_dac_cursor_index = 0; adc_buf_cursor0 = HALFBLOCKLENGTH; adc_buf_cursor1 = 2*HALFBLOCKLENGTH; dac_buf_cursor0 = HALFBLOCKLENGTH; dac_buf_cursor1 = 2*HALFBLOCKLENGTH; Setup(); while(1) { if (buffer_full_flag == 1) { GP4DAT ^= 0x00040000; // Complement P4.2 buffer_full_flag = 0; for (n=0; n<HALFBLOCKLENGTH; n++) { in_buf[n] = (adc_buf[adc_buf_cursor1 + HALFBLOCKLENGTH-1-n] * whanning[n]) >> 16; // APPLY HANNING WINDOW in_buf[n+HALFBLOCKLENGTH] = (adc_buf[adc_buf_cursor0 + HALFBLOCKLENGTH-1-n] * whanning[n+HALFBLOCKLENGTH]) >> 16; // APPLY HANNING WINDOW } speech(out_buf, in_buf, temp_buf, HALFBLOCKLENGTH); for (n=0; n<HALFBLOCKLENGTH; n++) { dac_buf[dac_buf_cursor1 + HALFBLOCKLENGTH-1-n] = (out_buf[n])<<16; dac_buf[dac_buf_cursor0 + HALFBLOCKLENGTH-1-n] = (out_buf[n+HALFBLOCKLENGTH])<<16; } } } return 0 ; } void Setup(void) { //ADC configuration REFCON = 0x01; ADCCON = 0xE2; int time; time = 20000; while (time >=0) { time--; } ADCCP = 0x03; DAC0CON = 0x13; DAC0DAT = 0x08000000; // for test purposes only GP0CON = 0x10103000; GP4DAT = 0x04000000; IQ = My_IRQ_Function; FIQEN = ADC_BIT; T0LD = 282; T0CON = 0xC4; return ; } // Interrupt Service Rountine void My_IRQ_Function() { if ( (FIQSTA & ADC_BIT) != 0 ) { adc_buf[adc_dac_buf_index] =ADCDAT; DAC0DAT = dac_buf[adc_dac_buf_index]; adc_dac_cursor_index++; if (adc_dac_cursor_index>=HALFBLOCKLENGTH) { adc_dac_cursor_index = 0; adc_buf_cursor0 += HALFBLOCKLENGTH; if (adc_buf_cursor0 >= 3*HALFBLOCKLENGTH) { adc_buf_cursor0 = 0; } adc_buf_cursor1 += HALFBLOCKLENGTH; if (adc_buf_cursor1 >= 3*HALFBLOCKLENGTH) { adc_buf_cursor1 = 0; } dac_buf_cursor0 += HALFBLOCKLENGTH; if (dac_buf_cursor0 >= 3*HALFBLOCKLENGTH) { dac_buf_cursor0 = 0; } dac_buf_cursor1 += HALFBLOCKLENGTH; if (dac_buf_cursor1 >= 3*HALFBLOCKLENGTH) { dac_buf_cursor1 = 0; } buffer_full_flag = 1; } adc_dac_buf_index++; if (adc_dac_buf_index >= 3*HALFBLOCKLENGTH) { adc_dac_buf_index = 0; } } return ; } Thanks Hameed