130 likes | 249 Views
ЦСП TMS320C67x Работа с периферией. ЦСП TMS320C67x: работа с периферией. ЦСП TMS320C67x: работа с периферией.
E N D
ЦСП TMS320C67x: работа с периферией Периферия представляет собой специализированные аппаратные ресурсы, расположенные на кристалле ЦСП и предназначенные для организации взаимодействия микросхемы ЦСП с внешними устройствами. Состав периферийных устройств часто определяет его выбор для применения в тех или иных системах.
ЦСП TMS320C67x: работа с периферией Сигнальный процессор TMS320C6701 содержит на кристалле следующие основные узлы периферии: интерфейс внешней памяти (EMIF) контроллер начальной загрузки по каналам прямого доступа в память хост-порт (HPI) многоканальные буферизированные последовательные порты (McBSP) таймеры схему фазовой автоподстройки частоты для тактового генератора (PLL) интерфейс JTAG-эмулятора
ЦСП TMS320C67x: работа с периферией Рассмотрим работу с периферией на примере организации следующей системы:
ЦСП TMS320C67x: работа с периферией Требуются:конфигурация кодека конфигурация McBSPконфигурация прерываний
ЦСП TMS320C67x: работа с периферией Конфигурация кодека выполняется с помощью специальной типовой программы
ЦСП TMS320C67x: работа с периферией Конфигурация McBSP
ЦСП TMS320C67x: работа с периферией Конфигурация прерываний подразумевает: глобальное разрешение прерываний, разрешение требуемого прерывания (от McBSP), создание таблицы векторов прерываний, создание функции обработки прерывания.
ЦСП TMS320C67x: работа с периферией //sine_intr.c Sine generation using sin() function #include <math.h> #include "dsk6713_aic23.h" // codec support Uint32 fs=DSK6713_AIC23_FREQ_8KHZ; //set sampling rate #define DSK6713_AIC23_INPUT_MIC 0x0015 #define DSK6713_AIC23_INPUT_LINE 0x0011 Uint16 inputsource=DSK6713_AIC23_INPUT_MIC; // select input #define SAMPLING_FREQ 8000 #define PI 3.14159265358979 float frequency = 1000.0; float amplitude = 10000.0; float theta_increment; float theta = 0.0;
ЦСП TMS320C67x: работа с периферией interrupt void c_int11() { theta_increment = 2*PI*frequency/SAMPLING_FREQ; theta += theta_increment; if (theta > 2*PI) theta -= 2*PI; output_left_sample((short)(amplitude*sin(theta))); return;} void main() { comm_intr(); while(1);}
ЦСП TMS320C67x: работа с периферией void c6713_dsk_init() //dsp-peripheral initialization{DSK6713_init(); //call BSL to init DSK-EMIF,PLL)hAIC23_handle=DSK6713_AIC23_openCodec(0,&config);//handle(pointer) to codec DSK6713_AIC23_setFreq(hAIC23_handle, fs); //set sample rateDSK6713_AIC23_rset(hAIC23_handle, 0x0004, inputsource);// choose mic or line inMCBSP_config(DSK6713_AIC23_DATAHANDLE,&AIC23CfgData);//interface 32 bits toAIC23 MCBSP_start(DSK6713_AIC23_DATAHANDLE, MCBSP_XMIT_START |MCBSP_RCV_START|MCBSP_SRGR_START | MCBSP_SRGR_FRAMESYNC, 220);//start data channel again}void output_left_sample(short out_data)//for output from leftchan{AIC_data.uint=0; //clear data structureAIC_data.channel[LEFT]=out_data; //data from Left channel –>data structure if (poll) while(!MCBSP_xrdy(DSK6713_AIC23_DATAHANDLE));//if ready to transmit MCBSP_write(DSK6713_AIC23_DATAHANDLE,AIC_data.uint);//output left channel}
ЦСП TMS320C67x: работа с периферией if (poll) while(!MCBSP_xrdy(DSK6713_AIC23_DATAHANDLE));//if ready to transmitMCBSP_write(DSK6713_AIC23_DATAHANDLE,AIC_data.uint);//output left channel}