信息学院电科专业课程设计报告
具。
CCS有两种工作模式,即
软件仿真器模式:可以脱离DSP芯片,在PC机上模拟DSP的指令集和工作机制,主要用于前期算法实现和调试。
硬件在线编程模式:可以实时运行在DSP芯片上,与硬件开发板相结合在线编程和调试应用程序。
CCS的开发系统主要由以下组件构成: ① TMS320C54x集成代码产生工具; ② CCS集成开发环境;
③ DSP/BIOS实时内核插件及其应用程序接口API; ④ 实时数据交换的RTDX插件以及相应的程序接口API; ⑤ 由TI公司以外的第三方提供的各种应用模块插件。
CCS的功能十分强大,它集成了代码的编辑、编译、链接和调试等诸多功能,而且支持C/C++和汇编的混合编程。
4.2 软件总体设计框图
F5529 显示logo 模拟信号 ADC12 显示工程相关 数据处 LCD
-8-
信息学院电科专业课程设计报告
4.3 软件分步配置:
4.3.1 配置ADC12:
F5529内部ADC为8位12通道模数转换器。实验中将P6.4作为模拟 信号的输入端口。时钟源为MCLK的3分频。
ADC12CTL0 = ADC12SHT02 + ADC12ON; // Sampling time, ADC12 on ADC12CTL1 |= ADC12SSEL0 + ADC12DIV2;
ADC12IE = 0x01; // Enable interrupt ADC12CTL0 |= ADC12ENC;
P6SEL |= 0x10; // P6.4 ADC option select
//ADC12SSEL 0:mclk 1:smclk
ADC12CTL1 |= ADC12SHP; // Use sampling timer ,0 clock
4.3.2 配置LCD1602:
采用F5529内置的点阵屏,相关详细配置参见F5529官方“HAL_Dogs102x6.c”
4.4 软件主程序
//******************************************************************************
// MSP430F552x // ----------------- // /|\\| | // | | | // --|RST | // | | // Vin -->|P6.4/CB0/A0 | //
//******************************************************************************
#include
-9-
信息学院电科专业课程设计报告
int read;
volatile unsigned int x = 0; volatile unsigned int flag = 0; volatile unsigned int value = 0; volatile unsigned int count = 0; volatile float freq = 1.4; volatile unsigned int i; #define Num_of_Results 2
volatile unsigned int results[Num_of_Results];
// Needs to be global in this // example. Otherwise, the // compiler removes it because it // is not used for anything. uint16_t timeoutCounter;
void init_lcd() {
// Dogs102x6_setBacklight(brightness); //设置初始背光值 // Dogs102x6_setContrast(contrast); //设置初始对比度值 }
int main(void)
Dogs102x6_clearScreen(); //显示文字说明:
//Dogs102x6_stringDraw(3, 0, \ // Brightness not programed in Flash Yet
if (brightness == 0xFF) //若当前FLASH中无背光值,则 // Set Default Brightness brightness = 0x11;
uint8_t contrast = *((unsigned char *)contrastSetpointAddress); uint8_t brightness = *((unsigned char *)brightnessSetpointAddress); // Set up LCD
Dogs102x6_init(); //初始化LCD Dogs102x6_backlightInit(); //背光初始化 // Contrast not programed in Flash Yet
if (contrast == 0xFF) //若当前FLASH中无对比度值, // Set Default Contrast contrast = 11; //读取FLASH中对比度值 //读取FLASH中背光值
则将对比度值设为11(默认)
将背光值设为11(默认)
-10-
信息学院电科专业课程设计报告
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT //Board_init(); //初始化GPIO // Globally enable interrupts
ADC12CTL0 = ADC12SHT02 + ADC12ON; // Sampling time, ADC12 on ADC12CTL1 |= ADC12SSEL0 + ADC12DIV2; 1:smclk
ADC12CTL1 |= ADC12SHP; // Use sampling timer ,0 clock
ADC12IE = 0x01; // Enable interrupt ADC12CTL0 |= ADC12ENC;
P7DIR |= 0x01; // P7.0 output
P6SEL |= 0x10; // P6.4 ADC option select P1DIR |= 0x01; // P1.0 output
TA1CCTL0 = CCIE; // CCR0 interrupt enabled TA1CCR0 = 2040;// (1/32768)*205 =5 ms ??
TA1CTL = TASSEL_1 + MC_1 + TACLR; // ACLK, upmode, clear TAR init_lcd(); //logo_init();
__enable_interrupt(); //使能全局中断 //info_init();
Dogs102x6_clearScreen(); buttonsPressed = 0;
//__disable_interrupt(); //关闭全局中断 while (1) {
ADC12CTL0 |= ADC12SC; // Start sampling/conversion __bis_SR_register(LPM0_bits + GIE); // LPM0, ADC12_ISR will force exit __no_operation(); // For debugger
//Dogs102x6_stringDraw(8, 0, \ } }
// Timer0_A5 Interrupt Vector (TAIV) handler #pragma vector=TIMER1_A0_VECTOR __interrupt void TIMER1_A0_ISR(void) {
P7OUT ^= 0x01; // Toggle P1.0 }
#pragma vector = ADC12_VECTOR __interrupt void ADC12_ISR(void) {
//ADC12SSEL 0:mclk -11-
信息学院电科专业课程设计报告
static unsigned char index = 0; if(x<103) { } else {
x++;
if (buttonsPressed){
if(freq>1.0 && freq <1.5) {
ADC12IE = 0x00; // Enable interrupt __bic_SR_register_on_exit(LPM0_bits); // Exit active CPU } else { flag = 0; value = 0; count = 0;
buttonsPressed = 0; Dogs102x6_clearScreen(); x=0; }
} else {
Dogs102x6_clearScreen(); x=0; } {
case 0: break; // Vector 0: No interrupt case 2: break; // Vector 2: ADC overflow case 4: break; // Vector 4: ADC timing overflow case 6: // Vector 6: ADC12IFG0
if (index == 2) {
index = 0; }
Dogs102x6_pixelDraw(x,41-ADC12MEM0/100 + 10,DOGS102x6_DRAW_NORMAL); read = ADC12MEM0;
results[index] = ADC12MEM0; // Move results
index++; // Increment results index, }
switch(__even_in_range(ADC12IV,34))
modulo; Set Breakpoint1 here
if( x>1 && abs(results[0]-results[1]) > 200 && x < 102/*the last line don't draw*/)
-12-