📄 mcbsp.c
字号:
/* FILE NAME: mcbsp.c FILE DESCRIPTION: Demonstrates usage of the Multi-channel Buffered Serial Port (McBSP). The following connections must be made before running this program: * P4 pin 4 ==> P4 pin 8 * P4 pin 7 ==> P4 pin 9 * P4 pin 3 ==> P4 pin 5 & P3 pin 1 * CN2 pin 1 ==> CN2 pin 23 * CN2 pin 31 ==> CN2 pin 32 * CN2 pin 33 ==> CN2 pin 34 * CN2 pin 35 ==> CN2 pin 36 * CN2 pin 37 ==> CN2 pin 38 * CN2 pin 39 ==> CN2 pin 40 * CN2 pin 41 ==> CN2 pin 42 * CN2 pin 43 ==> CN2 pin 44 * CN2 pin 45 ==> CN2 pin 46 The output sine wave appears on CN2 pin 21. PROJECT NAME: Linux DM7520 Driver, Library, and Example Programs PROJECT VERSION: (Defined in README.TXT) Copyright 2004 RTD Embedded Technologies, Inc. All Rights Reserved.*/#include <stdio.h> //printf#include <stdlib.h> //exit#include <errno.h> //errno#include <math.h> //sin#include <slang/slang.h> //anykey#include "dm7520_library.h"//suggests to press any key and returns number of key pressedint anykey(void) { int x; printf("\nPress any key to continue\n"); SLang_init_tty(-1, 1, 1); x = SLang_getkey(); SLang_reset_tty(); return x;}int main(int argc, char* argv[]){ FILE * infile; int board_idx; int i = 0; float actual=0.; int ret; if (argc<2) {fprintf(stderr,"Usage: %s <device>\n",argv[0]);exit(1);} if (NULL==(infile=fopen(argv[1],"r"))) { fprintf(stderr,"Cannot open file, errno=%d\n",errno); perror("Error is"); exit(2); } board_idx = fileno(infile); // get device handler ret = InitBoard7520(board_idx); // init board // The A to D conversion is triggered by the pacer clock. // The A to D data will be sent out over the serial port. SetChannelGain7520(board_idx, 0, 0, 0, 0, 0); // Load Channel Latch. EnableCGT7520(board_idx,0 ); // Enable Channel Gain Table EnableCGTDigital7520(board_idx, 0); // Disable Digital Table SetDIO0Direction7520(board_idx, 0); // set port 0 to input SetDIO1Direction7520(board_idx, 1); // set port 1 to output// as far DIO0 and DIO1 connected to each other writing 0 to port1 will set bit D2 of// input Data marker to 0 so McBSPDA will write to DA1 WriteDIO17520(board_idx, 0); SetPacerClock7520(board_idx, PCLK_START_SOFTWARE, PCLK_STOP_SOFTWARE, PCLK_NO_REPEAT, PCLK_INTERNAL, 10000); SetConversionSelect7520(board_idx, ADC_START_PCLK); // Conversion Select = PCLK ClearADFifo7520(board_idx); // Clear the fifo // The D to A conversion is triggered by the Syncbus. // When the syncbus is pulsed, the D to A will send out the data // on the serial port. // Disable SyncBuses on DM7520 EnableSbus07520(board_idx, 0); EnableSbus17520(board_idx, 0); EnableSbus27520(board_idx, 0); // DM7520 McBSP setup McBSPADControl7520(board_idx, 1); // Enable McBSP A/D FIFO Control McBSPDAControl7520(board_idx, 1); // Enable McBSP D/A FIFO Control // start ClearADFifo7520(board_idx); ClearDAC1Fifo7520(board_idx); ClearDAC2Fifo7520(board_idx);// Load Sine wave to DAC2 FIFO for (i=0;i<1024;i++) { LoadDAC27520(board_idx,2047.0 * sin(i*(2*M_PI/1024))); } // D/A setup SetupDAC7520(board_idx, DM7520_WRITE_DA1, AOUT_BIP5, DAC_CYCLE_SINGLE, DAC_START_SBUS0); ret = SetDACRateF7520(board_idx,100000.,0,&actual); if (ret!=0) printf("Error in SetDACRateF7520 ret=%d\n", ret); printf("Dac rate = %10.3f\n", actual); SetupDAC7520( board_idx, DM7520_WRITE_DA2, AOUT_BIP5, DAC_CYCLE_MULTI, DAC_START_SOFTWARE ); SetDAC2Start7520(board_idx,DAC_START_DAC_CLK); DACClockFreeRun7520(board_idx,1); EnableSbus07520(board_idx, 1); SetSbus0Source7520(board_idx,SBUS0_UTC2); SetUtc2Clock7520 (board_idx, CUTC2_8MHZ); SetupTimerCounter7520(board_idx,TC_UTC2,M8254_SQUARE_WAVE,10);//was 10 StartPacer7520(board_idx); // stop anykey(); StopPacer7520(board_idx); SetDAC2Start7520(board_idx,DAC_START_SOFTWARE); McBSPADControl7520(board_idx, 0); McBSPDAControl7520(board_idx, 0); EnableSbus07520(board_idx, 0); LoadDAC17520(board_idx, 0); LoadDAC27520(board_idx, 0); UpdateAllDAC7520(board_idx); return 0;} // mcbsp_test
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -