📄 sinea.c
字号:
/*****************************************************************************/
/* sine.c */
/* */
/* sine wave generator. edit by Gao */
/* */
/*****************************************************************************/
#include <type.h>
#include <board.h>
#include <codec.h>
#include <mcbsp54.h>
/*****************************************************************************/
/* Function Prototypes */
/*****************************************************************************/
/* This delay routine does not conflict with DSP/BIOS. It is used in this */
/* example rather than brd_delay_msec which causes DSP/BIOS conflicts just */
/* because of this. If you are not using DSP/BIOS, you can change the code */
/* to use brd_delay_msec. */
void delay(void);
/*****************************************************************************/
/* Global Variables */
/*****************************************************************************/
#define _cosx 0.999390827
//#pragma DATA_SECTION(_cosx,"data_buf1")
float cosx1[200];
#pragma DATA_SECTION(dacdata,"data_buf2")
int dacdata[180];
HANDLE hHandset;
s16 data;
//**********************************************************************
// SINE LOOKUP TABLE
//**********************************************************************
/* s16 SINE_TABLE[]=
{
0x00324
,0x00647
,0x0096A
,0x00C8B
,0x00FAB
,0x012C7
,0x015E1
,0x018F8
,0x01C0B
,0x01F19
,0x02223
,0x02527
,0x02826
,0x02B1E
,0x02E10
,0x030FB
,0x033DE
,0x036B9
,0x0398C
,0x03C56
,0x03F16
,0x041CD
,0x0447A
,0x0471C
,0x049B3
,0x04C3F
,0x04EBF
,0x05133
,0x0539A
,0x055F4
,0x05842
,0x05A81
,0x05CB3
,0x05ED6
,0x060EB
,0x062F1
,0x064E7
,0x066CE
,0x068A5
,0x06A6C
,0x06C23
,0x06DC9
,0x06F5E
,0x070E1
,0x07254
,0x073B5
,0x07503
,0x07640
,0x0776B
,0x07883
,0x07989
,0x07A7C
,0x07B5C
,0x07C29
,0x07CE2
,0x07D89
,0x07E1C
,0x07E9C
,0x07F08
,0x07F61
,0x07FA6
,0x07FD7
,0x07FF5
,0x07FFE
,0x07FF5
,0x07FD7
,0x07FA6
,0x07F61
,0x07F08
,0x07E9C
,0x07E1C
,0x07D89
,0x07CE2
,0x07C29
,0x07B5C
,0x07A7C
,0x07989
,0x07883
,0x0776B
,0x07640
,0x07503
,0x073B5
,0x07254
,0x070E1
,0x06F5E
,0x06DC9
,0x06C23
,0x06A6C
,0x068A5
,0x066CE
,0x064E7
,0x062F1
,0x060EB
,0x05ED6
,0x05CB3
,0x05A81
,0x05842
,0x055F5
,0x0539A
,0x05133
,0x04EBF
,0x04C3F
,0x049B3
,0x0471C
,0x0447A
,0x041CD
,0x03F16
,0x03C56
,0x0398C
,0x036B9
,0x033DE
,0x030FB
,0x02E10
,0x02B1E
,0x02826
,0x02527
,0x02223
,0x01F19
,0x01C0B
,0x018F8
,0x015E1
,0x012C7
,0x00FAB
,0x00C8B
,0x0096A
,0x00647
,0x00324
,0x00000
,0x0FCDC
,0x0F9B9
,0x0F696
,0x0F375
,0x0F056
,0x0ED39
,0x0EA1F
,0x0E708
,0x0E3F5
,0x0E0E7
,0x0DDDD
,0x0DAD9
,0x0D7DA
,0x0D4E2
,0x0D1F0
,0x0CF05
,0x0CC22
,0x0C947
,0x0C674
,0x0C3AA
,0x0C0EA
,0x0BE33
,0x0BB86
,0x0B8E4
,0x0B64D
,0x0B3C1
,0x0B141
,0x0AECD
,0x0AC66
,0x0AA0C
,0x0A7BE
,0x0A57F
,0x0A34D
,0x0A12A
,0x09F15
,0x09D0F
,0x09B19
,0x09932
,0x0975B
,0x09594
,0x093DD
,0x09237
,0x090A2
,0x08F1F
,0x08DAC
,0x08C4C
,0x08AFD
,0x089C0
,0x08895
,0x0877D
,0x08677
,0x08584
,0x084A4
,0x083D8
,0x0831E
,0x08277
,0x081E4
,0x08164
,0x080F8
,0x0809F
,0x0805A
,0x08029
,0x0800B
,0x08002
,0x0800B
,0x08029
,0x0805A
,0x0809F
,0x080F8
,0x08164
,0x081E4
,0x08277
,0x0831E
,0x083D7
,0x084A4
,0x08584
,0x08677
,0x0877D
,0x08895
,0x089C0
,0x08AFD
,0x08C4B
,0x08DAC
,0x08F1F
,0x090A2
,0x09237
,0x093DD
,0x09594
,0x0975B
,0x09932
,0x09B19
,0x09D0F
,0x09F15
,0x0A12A
,0x0A34D
,0x0A57F
,0x0A7BE
,0x0AA0B
,0x0AC66
,0x0AECD
,0x0B141
,0x0B3C1
,0x0B64D
,0x0B8E4
,0x0BB86
,0x0BE33
,0x0C0EA
,0x0C3AA
,0x0C674
,0x0C947
,0x0CC22
,0x0CF05
,0x0D1F0
,0x0D4E1
,0x0D7DA
,0x0DAD9
,0x0DDDD
,0x0E0E7
,0x0E3F5
,0x0E708
,0x0EA1E
,0x0ED38
,0x0F055
,0x0F375
,0x0F696
,0x0F9B9
,0x0FCDC
,0x00000
}; */
/*****************************************************************************/
/* MAIN */
/*****************************************************************************/
unsigned int i=0;
void main()
{
s16 amp=5; //sine amplitude coefficient
s16 cnt=2;
u16 i=0;
if (brd_init(100))
return;
/* blink the leds a couple times */
while ( cnt-- )
{
brd_led_toggle(BRD_LED0);
/* brd_delay_msec(1000); */
delay();
brd_led_toggle(BRD_LED1);
/* brd_delay_msec(1000); */
delay();
brd_led_toggle(BRD_LED2);
/* brd_delay_msec(1000); */
delay();
}
cosx1[0]=1.000;
dacdata[0]=4095;
cosx1[1]=_cosx;
dacdata[1]=_cosx*2047+2048;
i=1;
while(1)
{
if(i++>179)
break;
cosx1[i]=2*_cosx*cosx1[i-1]-cosx1[i-2];
dacdata[i]=cosx1[i]*2047+2048;
}
i=0;
/* Open Handset Codec */
hHandset = codec_open(HANDSET_CODEC); /* Acquire handle to codec */
/* Set codec parameters */
codec_dac_mode(hHandset, CODEC_DAC_15BIT); /* DAC in 15-bit mode */
codec_adc_mode(hHandset, CODEC_ADC_15BIT); /* ADC in 15-bit mode */
codec_ain_gain(hHandset, CODEC_AIN_6dB); /* 6dB gain on analog input to ADC */
codec_aout_gain(hHandset, CODEC_AOUT_MINUS_6dB); /* -6dB gain on analog output from DAC */
codec_sample_rate(hHandset,SR_16000); /* 16KHz sampling rate */
/* Polling and digital loopback */
while (1)
{
/* Read sample from and write back to handset codec */
//data = *(volatile u16*)DRR1_ADDR(HANDSET_CODEC);
//*(volatile u16*)DXR1_ADDR(HANDSET_CODEC) = data;
{
if(i>179)
{
i=0;
brd_led_toggle(BRD_LED0);
}
/* 将dacdata[i]输出到D/A */
while (!MCBSP_XRDY(HANDSET_CODEC)) {};
/* write sample to handset codec */
*(volatile u16*)DXR1_ADDR(HANDSET_CODEC) = amp*dacdata[i++];
delay();
}
}
}
void delay(void)
{
long int j;
for(j=0; j<200; j++)
asm("_nop");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -