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

📄 cochlear1.c

📁 这是一个在TMS5509A平台上运行的工程
💻 C
📖 第 1 页 / 共 3 页
字号:
			temp0 = *p_code & 0x0002;
			temp0 = temp0 >> 1;
			temp1 = temp0 + temp1;
			temp0 = *p_code & 0x0004;
			temp0 = temp0 >> 2;
			temp1 = temp0 + temp1;
			temp0 = *p_code & 0x0008;
			temp0 = temp0 >> 3;
			temp1 = temp0 + temp1;
			temp0 = *p_code & 0x0010;
			temp0 = temp0 >> 4;
			temp1 = temp0 + temp1;
			temp0 = *p_code & 0x0020;
			temp0 = temp0 >> 5;
			temp1 = temp0 + temp1;
			temp0 = *p_code & 0x0040;
			temp0 = temp0 >> 6;
			temp1 = temp0 + temp1;
			temp0 = *p_code & 0x0080;
			temp0 = temp0 >> 7;
			temp1 = temp0 + temp1;
			temp0 = *p_code & 0x0100;
			temp0 = temp0 >> 8;
			temp1 = temp0 + temp1;
			temp0 = *p_code & 0x0200;
			temp0 = temp0 >> 9;
			temp1 = (temp0 + temp1) & 0x0001;	// temp1 = Checkout Bit0
			*p_code = (*p_code << 13) + (temp1 << 12); 
			
			temp1 = 0;
			temp0 = pulse_width & 0x0001;		// To Compute Checkout Bit1
			temp1 = temp0 + temp1;
			temp0 = pulse_width & 0x0002;
			temp0 = temp0 >> 1;
			temp1 = temp0 + temp1;
			temp0 = pulse_width & 0x0004;
			temp0 = temp0 >> 2;
			temp1 = temp0 + temp1;
			temp0 = pulse_width & 0x0008;
			temp0 = temp0 >> 3;
			temp1 = temp0 + temp1;
			temp0 = pulse_width & 0x0010;
			temp0 = temp0 >> 4;
			temp1 = temp0 + temp1;
			temp0 = pulse_width & 0x0020;
			temp0 = temp0 >> 5;
			temp1 = temp0 + temp1;
			temp0 = electrode_select & 0x0001;
			temp1 = temp0 + temp1;
			temp0 = electrode_select & 0x0002;
			temp0 = temp0 >> 1;
			temp1 = temp0 + temp1;
			temp0 = electrode_select & 0x0004;
			temp0 = temp0 >> 2;
			temp1 = temp0 + temp1;
			temp0 = electrode_select & 0x0008;
			temp0 = temp0 >> 3;
			temp1 = temp0 + temp1;
			temp0 = electrode_select & 0x0010;
			temp0 = temp0 >> 4;
			temp1 = (temp0 + temp1) & 0x0001;	// temp1 = Checkout Bit1
			
			*p_code = *p_code + (pulse_width << 6);
			*p_code = (*p_code + (electrode_select << 1) + temp1) | START_BIT;	// Complete Coding
			
//			electrode_select++;							// Increase Electrode Sequence
//			if(electrode_select == AMOUNT_ELECTRODE)
//				electrode_select =0;
			p_code++;
		}
        while(((AUDIO_DATA_SECTION==0)&&(process_data0_mark==1))||		// Wait for new data
        	  ((AUDIO_DATA_SECTION==1)&&(process_data1_mark==1))||
        	  ((AUDIO_DATA_SECTION==2)&&(process_data2_mark==1))||
        	  ((AUDIO_DATA_SECTION==3)&&(process_data3_mark==1)));
    }
}

/*==============================================================*/
/* External Interrupt0 - Power On or Off */
interrupt void Power_Switch_Isr(void)
{
	Uint16 i;

	for(i=0;i<10;i++)
	{
		GPIO_FSET(IODATA,IO6D,0x0001);			// Dark the Green LED
		delay();
		GPIO_FSET(IODATA,IO6D,0x0000);			// Light the Green LED
		delay();
	}
	IRQ_clear(IRQ_EVT_INT0);
}

/* External Interrupt1 - Select a Signal form Micphone or Line in */
interrupt void Signal_Alter_Isr(void)
{   
	Uint16 WM8950_R2[2];		// R2 - Power Manage2 Register
	Uint16 WM8950_R32[2];		// R32 - ALC Control Register1
	Uint16 WM8950_R44[2];		// R44 - Input Control Register
	Uint16 WM8950_R47[2];		// R47 - ADC Boost Control Register
	
	if(SIGNAL_SELECT==0) 
	{
		SIGNAL_SELECT = 1;
		
		WM8950_R2[0] = 0x04;
		WM8950_R2[1] = 0x01;
		WM8950_R32[0] = 0x40;
		WM8950_R32[1] = 0x00;
		WM8950_R44[0] = 0x58;
		WM8950_R44[1] = 0x00;
		WM8950_R47[0] = 0x5e;
		WM8950_R47[1] = 0x00;
	
		I2C_write(WM8950_R2,2,1,I2C_Addr,1,30000);
		I2C_write(WM8950_R32,2,1,I2C_Addr,1,30000);
		I2C_write(WM8950_R44,2,1,I2C_Addr,1,30000);
		I2C_write(WM8950_R47,2,1,I2C_Addr,1,30000);
	}
	else
	{
		SIGNAL_SELECT = 0;
		
		WM8950_R2[0] = 0x04;
		WM8950_R2[1] = 0x15;
		WM8950_R32[0] = 0x41;
		WM8950_R32[1] = 0x38;
		WM8950_R44[0] = 0x58;
		WM8950_R44[1] = 0x03;
		WM8950_R47[0] = 0x5f;
		WM8950_R47[1] = 0x00;

		I2C_write(WM8950_R2,2,1,I2C_Addr,1,30000);
		I2C_write(WM8950_R32,2,1,I2C_Addr,1,30000);
		I2C_write(WM8950_R44,2,1,I2C_Addr,1,30000);
		I2C_write(WM8950_R47,2,1,I2C_Addr,1,30000);
	}
	delay();
	IRQ_clear(IRQ_EVT_INT1);
}

/* External Interrupt2 - Cause the Interrupt When Battery Voltage is below a Threshold Defined */
interrupt void Alert_Bat_Isr(void)
{
	Uint16 i;

	for(i=0;i<10;i++)
	{
		GPIO_FSET(IODATA,IO1D,0x0000);		// Light the Red LED
		delay();
		GPIO_FSET(IODATA,IO1D,0x0001);		// Dark the Red LED
		delay();
	}
	IRQ_clear(IRQ_EVT_INT2);
}

/* Timer0 Interrupt */
interrupt void Timer0_Isr(void)
{
	if(timer_count0!=0)
	{
		timer_count0--;
		if(timer_count0==0)
		{
			GPIO_FSET(IODATA,IO7D,0);				// Pulse Data Line Become High to send START Bit
		}
	}
	else
	{
		timer_count1--;
		if(timer_count1==0)
		{
			pulse_code_bit_counter--;
			if(pulse_code_bit_counter != 0)
			{
				GPIO_FSET(IODATA,IO7D,1);
				*p_pulse = *p_pulse << 1;
				if((*p_pulse & 0x80000000) == 0)
				{
					timer_count0 = 1;
					timer_count1 = 2;
				}
				else
				{
					timer_count0 = 2;
					timer_count1 = 1;
				}
			}
			else
			{
				GPIO_FSET(IODATA,IO7D,0);
				TIMER_FSET(TCR0,TSS,TIMER_TCR_TSS_STOP);
				TIMER_FSET(TCR1,TSS,TIMER_TCR_TSS_START);				
			}
		}
	}
}

/* Timer1 Interrupt */
interrupt void Timer1_Isr(void)
{
	TIMER_FSET(TCR1,TSS,TIMER_TCR_TSS_STOP);		// Stop Timer1
	
	pulse_counter--;
	if(pulse_counter != 0)							// if One Frame Data hasn't been sent
	{
		GPIO_FSET(IODATA,IO7D,1);
		p_pulse++;
		*p_pulse = *p_pulse << 8;
		TIMER_FSET(TCR0,TSS,TIMER_TCR_TSS_START);
		pulse_code_bit_counter = AMOUNT_CODE_BITS;
		timer_count0 = 2;
		timer_count1 = 1;
	}
}
	
/* DMA Channel 0 Receiver interrupt */
void DMA_rcv_Isr(void)
{
	Uint16 dstAddrHi,dstAddrLo;

	switch(AUDIO_DATA_SECTION)
	{
		case 0:
			AUDIO_DATA_SECTION = 1;
			DMA_FSET(DMACCR0,EN,0x0000u);
			DMA_FSET(DMACSR0,FRAME,0x0000u);
			DMA_FSET(DMACSR0,SYNC,0x0000u);
			dstAddrHi = (Uint16)(((Uint32)(AUDIO_DATA1)) >> 15) & 0xFFFFu;
			dstAddrLo = (Uint16)(((Uint32)(AUDIO_DATA1)) << 1) & 0xFFFFu;
			DMA_RSET(DMACDSAL0,dstAddrLo);
			DMA_RSET(DMACDSAU0,dstAddrHi);
			DMA_FSET(DMACCR0,ENDPROG,DMA_DMACCR_ENDPROG_ON);
			DMA_FSET(DMACCR0,EN,0x0001u);
			p_pulse = PULSE_DATA1;
			break;
				
		case 1:
			AUDIO_DATA_SECTION = 2;
			DMA_FSET(DMACCR0,EN,0x0000u);
			DMA_FSET(DMACSR0,FRAME,0x0000u);
			DMA_FSET(DMACSR0,SYNC,0x0000u);
			dstAddrHi = (Uint16)(((Uint32)(AUDIO_DATA2)) >> 15) & 0xFFFFu;
			dstAddrLo = (Uint16)(((Uint32)(AUDIO_DATA2)) << 1) & 0xFFFFu;
			DMA_RSET(DMACDSAL0,dstAddrLo);
			DMA_RSET(DMACDSAU0,dstAddrHi);
			DMA_FSET(DMACCR0,ENDPROG,DMA_DMACCR_ENDPROG_ON);
			DMA_FSET(DMACCR0,EN,0x0001u);
			p_pulse = PULSE_DATA0;
			break;
		
		case 2:
			AUDIO_DATA_SECTION = 3;
			DMA_FSET(DMACCR0,EN,0x0000u);
			DMA_FSET(DMACSR0,FRAME,0x0000u);
			DMA_FSET(DMACSR0,SYNC,0x0000u);
			dstAddrHi = (Uint16)(((Uint32)(AUDIO_DATA3)) >> 15) & 0xFFFFu;
			dstAddrLo = (Uint16)(((Uint32)(AUDIO_DATA3)) << 1) & 0xFFFFu;
			DMA_RSET(DMACDSAL0,dstAddrLo);
			DMA_RSET(DMACDSAU0,dstAddrHi);
			DMA_FSET(DMACCR0,ENDPROG,DMA_DMACCR_ENDPROG_ON);
			DMA_FSET(DMACCR0,EN,0x0001u);
			p_pulse = PULSE_DATA1;
			break;
		
		case 3:
			AUDIO_DATA_SECTION = 0;
			DMA_FSET(DMACCR0,EN,0x0000u);
			DMA_FSET(DMACSR0,FRAME,0x0000u);
			DMA_FSET(DMACSR0,SYNC,0x0000u);
			dstAddrHi = (Uint16)(((Uint32)(AUDIO_DATA0)) >> 15) & 0xFFFFu;
			dstAddrLo = (Uint16)(((Uint32)(AUDIO_DATA0)) << 1) & 0xFFFFu;
			DMA_RSET(DMACDSAL0,dstAddrLo);
			DMA_RSET(DMACDSAU0,dstAddrHi);
			DMA_FSET(DMACCR0,ENDPROG,DMA_DMACCR_ENDPROG_ON);
			DMA_FSET(DMACCR0,EN,0x0001u);
			p_pulse = PULSE_DATA0;
			break;
				
		default:
			AUDIO_DATA_SECTION = 0;
			DMA_FSET(DMACCR0,EN,0x0000u);
			DMA_FSET(DMACSR0,FRAME,0x0000u);
			DMA_FSET(DMACSR0,SYNC,0x0000u);
			dstAddrHi = (Uint16)(((Uint32)(AUDIO_DATA0)) >> 15) & 0xFFFFu;
			dstAddrLo = (Uint16)(((Uint32)(AUDIO_DATA0)) << 1) & 0xFFFFu;
			DMA_RSET(DMACDSAL0,dstAddrLo);
			DMA_RSET(DMACDSAU0,dstAddrHi);
			DMA_FSET(DMACCR0,ENDPROG,DMA_DMACCR_ENDPROG_ON);
			DMA_FSET(DMACCR0,EN,0x0001u);
			p_pulse = PULSE_DATA0;
			break;
	}	
	
	*p_pulse = *p_pulse << 8;
	pulse_code_bit_counter = AMOUNT_CODE_BITS;
	pulse_counter = AMOUNT_DATA_FRAME;
	timer_count0 = 2;
	timer_count1 = 1;
	
	GPIO_FSET(IODATA,IO7D,0x0001);				// Pulse Data Line Become High to send Start Bit
	TIMER_FSET(TCR0,TSS,TIMER_TCR_TSS_START);	// Start Timer0
}

/******************************************************************************/

⌨️ 快捷键说明

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