3431|6

314

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

LM3S程序求教 [复制链接]

 
//————————————————头文件————————————————————
#include "inc/hw_ints.h"//硬件中断
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"//硬件类型
#include "driverlib/gpio.h"//GPIO
#include "driverlib/sysctl.h"//系统
#include "grlib/grlib.h"//画图
#include "drivers/kitronix320x240x16_ssd2119_8bit.h"
#include "drivers/set_pinout.h"
#include "driverlib/interrupt.h"//中断
#include "driverlib/comp.h"//comp
#include "driverlib/systick.h"//systick
#include "driverlib/adc.h"//adc
#include  <stdio.h>
//———————————————————————————————————————
tContext sContext;//声明绘图
tBoolean ADC_EndFlag = false;//定义A/D转换结束的标志                               
unsigned long TheSysClock = 12000000UL;//定义系统时钟12MHZ
//———————————————————————————————————————
// The error routine that is called if the driver library encounters an error.
//———————————————————————————————————————
#ifdef DEBUG4
void
__error__(char *pcFilename, unsigned long ulLine)
{
}
#endif
//———————————————————————————————————————
//******************************************************************************
//  Initialize the System timer (SysTick)初始化
void SysTickInit(void)
{   // Set the period of the SysTick 
    SysTickPeriodSet(TheSysClock);//SysTick(一个简单的定时器)的周期   
    // Enable SysTick interrupts
    SysTickIntEnable();//使能SysTick中断    
    // Enable System interrupts
    IntMasterEnable();//使能处理器中断    
    // Enable the SysTick
    SysTickEnable();//使能SysTick计数器                                        
}
//******************************************************************************
//———————————————————————————————————————
// Display the temperature of the chip
void tmpDisplay(unsigned long ulValue)
{
    unsigned long ulTemp;
    char pcBuffer1[4];
    char pcBuffer2[3];
    
    ulTemp = 151040UL - 225 * ulValue;//(ADC采样值转化为温度值)的1024倍
    pcBuffer1[0] = ' ';//空格
    pcBuffer1[1] = (ulTemp/1024)%100/10 + '0';//十位
    pcBuffer1[2] = (ulTemp/1024)%10 + '0';//个位
    pcBuffer1[3] = '\0';//结束符
    GrContextFontSet(&sContext, &g_sFontCm36b);//字体设置
    GrStringDrawCentered(&sContext, pcBuffer1, -1, 110, 180, 1);//写整数部分    
    pcBuffer2[0] = '.';//小数点
    pcBuffer2[1] = (ulTemp%1024)/102+'0';//小数
    pcBuffer2[2] = '\0';//结束符 
    GrContextFontSet(&sContext, &g_sFontCm36b);//字体设置
    GrStringDrawCentered(&sContext, pcBuffer2, -1, 150, 180, 1);//写小数部分  
}
//———————————————————————————————————————
//******************************************************************************
//  SysTick ISR SysTick的中断服务函数
void SysTick_ISR(void)
{    //  Just used to wake up CPU,do nothing 唤醒CPU
}
//******************************************************************************
//———————————————————————————————————————
//  ADC Sequence 3 ISR   ADC序列3的中断服务函数
void ADC_Sequence_3_ISR(void)
{    unsigned long ulStatus;
    //Get interrupt status
    ulStatus = ADCIntStatus(ADC_BASE, 3, true);//获取当前的中断状态    
    // Clear interrupts
    ADCIntClear(ADC_BASE, 3);//清除中断状态,重要                             
    // If interrupt status is ture, set ADC ending flag as ture 
    //如果中断状态有效,置位ADC采样结束标志
    if (ulStatus != 0)                                      
    {
        ADC_EndFlag = true;                                 
    }
}
//如果中断状态值为真,则将中断结束标志置为真,真表示需要屏蔽的中断状态
//假表示需要原始的中断状态
//———————————————————————————————————————
int main(void)
{    unsigned long ulValue;  
    // Set the clocking to run directly from the crystal.
    SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_USE_OSC|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);    
    // Get system clock
    TheSysClock = SysCtlClockGet();//获取处理器时钟速率                  
    // Initialize the device pinout appropriately for this board.
    //—————————————初始化显示驱动—————————————————
    PinoutSet();    
    // Initialize the display driver and graphics context.
    Kitronix320x240x16_SSD2119Init();
    //—————————————————————————————————————
    GrContextInit(&sContext, &g_sKitronix320x240x16_SSD2119);//初始化a drawning context 
    //————————————————设置方框—————————————————
    tRectangle sRect;    
    sRect.sXMin = 0;
    sRect.sYMin = 0;
    sRect.sXMax = GrContextDpyWidthGet(&sContext) - 1;
    sRect.sYMax = 23;
    //—————————————————————————————————————
    GrContextForegroundSet(&sContext, ClrDarkBlue);
    GrRectFill(&sContext, &sRect);
    GrContextForegroundSet(&sContext, ClrWhite);
    GrRectDraw(&sContext, &sRect);
    GrContextFontSet(&sContext, &g_sFontCm20);
    GrStringDrawCentered(&sContext, "Lab7-2: ADC Controls", -1,GrContextDpyWidthGet(&sContext) / 2, 10, 0);   
    // Operation Tips
    GrContextFontSet(&sContext, &g_sFontCm26b);
    GrStringDrawCentered(&sContext, "Temperature Sample", -1,GrContextDpyWidthGet(&sContext) / 2, 60, 1);
    GrContextFontSet(&sContext, &g_sFontCm16);
    GrStringDrawCentered(&sContext, "Sample from the internal temperature sensor,", -1,GrContextDpyWidthGet(&sContext) / 2, 100, 1);
    GrStringDrawCentered(&sContext, "the current temperature of MCU is :", -1,GrContextDpyWidthGet(&sContext) / 2, 140, 1);
    GrStringDrawCentered(&sContext, "o", -1,GrContextDpyWidthGet(&sContext) / 2+20, 165, 1);
    GrContextFontSet(&sContext, &g_sFontCm36);
    GrStringDrawCentered(&sContext, "C", -1,GrContextDpyWidthGet(&sContext) / 2+35, 180, 1);    
    // Initialize the ADC0.
    // Enable ADC0                          
    SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);//使能ADC0           
    // Set the sample rate of ADC0
    SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS);//设置ADC采样速率    
    // Disable before setting
    ADCSequenceDisable(ADC_BASE, 3);//禁止一个采样序列    
    // Configure sample sequence:ADC base address,sample sequence number,trigger event,and priority
    ADCSequenceConfigure(ADC_BASE, 3, ADC_TRIGGER_PROCESSOR, 0);//采样序列配置,0表示最高优先级    
    // Sample step setup:ADC base address,sample sequence number,step value,channel setting
    ADCSequenceStepConfigure(ADC_BASE, 3, 0, ADC_CTL_TS|ADC_CTL_END|ADC_CTL_IE);//采样步进设置    
    // Enable ADC interrupt 
    ADCIntEnable(ADC_BASE, 3);//使能ADC中断                           
    // Enable interrupt for ADC sequence 3
    IntEnable(INT_ADC3);//使能ADC采样序列中断                            
    // Enable system clock
    IntMasterEnable();//使能处理器中断  
    // Start Sampling
    ADCSequenceEnable(ADC_BASE, 3);//使能采样序列
    // Initialize SysTick
    SysTickInit();//SysTick初始化                                        
    while(1)
    { // fall into sleep mode
      SysCtlSleep();//使处理器进入睡眠模式      
      //  Process 
      ADCProcessorTrigger(ADC_BASE, 3);//处理器触发采样序列       
      // Waiting for sample complete
      while (!ADC_EndFlag);                          
      // Clear flag
      ADC_EndFlag = false;                                  
      ADCSequenceDataGet(ADC_BASE, 3, &ulValue);//获取采样序列3捕获的数据
      // Display the current temperature of the CPU
      tmpDisplay(ulValue);                                  
      GrFlush(&sContext);        
    }
}

为什么执行到SysCtlSleep()就停止执行了,恳求高手帮忙。

最新回复

没有注册中断向量表?  详情 回复 发表于 2012-3-17 00:13
点赞 关注
 

回复
举报

424

帖子

0

TA的资源

纯净的硅(高级)

沙发
 
进入睡眠模式,CPU睡了,所以就停止了
 
 
 

回复

314

帖子

0

TA的资源

纯净的硅(初级)

板凳
 

回复 沙发 鸵鸟蝈蝈 的帖子

这个是光盘里自带的程序啊,光盘中那个工作区能够执行这个程序,自己新建工作区后,把这个程序直接复制过后就执行到那停止了,感觉好奇怪。
 
 
 

回复

2453

帖子

19

TA的资源

五彩晶圆(中级)

4
 
没有注册中断向量表?

赞赏

1

查看全部赞赏

 
 
 

回复

314

帖子

0

TA的资源

纯净的硅(初级)

5
 

回复 4楼 zca123 的帖子

如何注册中断向量表啊?
 
 
 

回复

314

帖子

0

TA的资源

纯净的硅(初级)

6
 

回复 4楼 zca123 的帖子

中断向量表:
__root const uVectorEntry __vector_table[] @ ".intvec" =
{
    { .ulPtr = (unsigned long)pulStack + sizeof(pulStack) },
                                            // The initial stack pointer
    __iar_program_start,                    // The reset handler
    NmiSR,                                  // The NMI handler
    FaultISR,                               // The hard fault handler
    IntDefaultHandler,                      // The MPU fault handler
    IntDefaultHandler,                      // The bus fault handler
    IntDefaultHandler,                      // The usage fault handler
    0,                                      // Reserved
    0,                                      // Reserved
    0,                                      // Reserved
    0,                                      // Reserved
    IntDefaultHandler,                      // SVCall handler
    IntDefaultHandler,                      // Debug monitor handler
    0,                                      // Reserved
    IntDefaultHandler,                      // The PendSV handler
    SysTick_ISR,                            // The SysTick handler
    IntDefaultHandler,                      // GPIO Port A
    IntDefaultHandler,                      // GPIO Port B
    IntDefaultHandler,                      // GPIO Port C
    IntDefaultHandler,                      // GPIO Port D
    IntDefaultHandler,                      // GPIO Port E
    IntDefaultHandler,                      // UART0 Rx and Tx
    IntDefaultHandler,                      // UART1 Rx and Tx
    IntDefaultHandler,                      // SSI0 Rx and Tx
    IntDefaultHandler,                      // I2C0 Master and Slave
    IntDefaultHandler,                      // PWM Fault
    IntDefaultHandler,                      // PWM Generator 0
    IntDefaultHandler,                      // PWM Generator 1
    IntDefaultHandler,                      // PWM Generator 2
    IntDefaultHandler,                      // Quadrature Encoder 0
    IntDefaultHandler,                      // ADC Sequence 0
    IntDefaultHandler,                      // ADC Sequence 1
    IntDefaultHandler,                      // ADC Sequence 2
    ADC_Sequence_3_ISR,                     // ADC Sequence 3
    IntDefaultHandler,                      // Watchdog timer
    IntDefaultHandler,                      // Timer 0 subtimer A
    IntDefaultHandler,                      // Timer 0 subtimer B
    IntDefaultHandler,                      // Timer 1 subtimer A
    IntDefaultHandler,                      // Timer 1 subtimer B
    IntDefaultHandler,                      // Timer 2 subtimer A
    IntDefaultHandler,                      // Timer 2 subtimer B
    IntDefaultHandler,                      // Analog Comparator 0
    IntDefaultHandler,                      // Analog Comparator 1
    IntDefaultHandler,                      // Analog Comparator 2
    IntDefaultHandler,                      // System Control (PLL, OSC, BO)
    IntDefaultHandler,                      // FLASH Control
    IntDefaultHandler,                      // GPIO Port F
    IntDefaultHandler,                      // GPIO Port G
    IntDefaultHandler,                      // GPIO Port H
    IntDefaultHandler,                      // UART2 Rx and Tx
    IntDefaultHandler,                      // SSI1 Rx and Tx
    IntDefaultHandler,                      // Timer 3 subtimer A
    IntDefaultHandler,                      // Timer 3 subtimer B
    IntDefaultHandler,                      // I2C1 Master and Slave
    IntDefaultHandler,                      // Quadrature Encoder 1
    IntDefaultHandler,                      // CAN0
    IntDefaultHandler,                      // CAN1
    IntDefaultHandler,                      // CAN2
    IntDefaultHandler,                      // Ethernet
    IntDefaultHandler,                      // Hibernate
    IntDefaultHandler,                      // USB0
    IntDefaultHandler,                      // PWM Generator 3
    IntDefaultHandler,                      // uDMA Software Transfer
    IntDefaultHandler,                      // uDMA Error
    IntDefaultHandler,                      // ADC1 Sequence 0
    IntDefaultHandler,                      // ADC1 Sequence 1
    IntDefaultHandler,                      // ADC1 Sequence 2
    IntDefaultHandler,                      // ADC1 Sequence 3
    IntDefaultHandler,                      // I2S0
    IntDefaultHandler,                      // External Bus Interface 0
    IntDefaultHandler                       // GPIO Port J
};
主程序中定义的两个中断这个向量表里有的啊。。。。。
 
 
 

回复

314

帖子

0

TA的资源

纯净的硅(初级)

7
 

回复 4楼 zca123 的帖子

这个问题解决了,要把向量表动一下再改回去就可以了,好神奇啊,谢谢你的提醒。。。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表