【问题标题】:KL25 DAC Driver shows no output on oscilloscopeKL25 DAC 驱动器在示波器上显示无输出
【发布时间】:2015-12-10 23:21:32
【问题描述】:

我正在为 Freedom KL25z 编写一个 DAC 驱动程序,但它不起作用。我正在用示波器测试它,但电压没有上升。

我的配置功能正在使用可用于 KL25 的 DAC 通道...

将示波器电压连接到 PORTE30 引脚,将示波器地连接到 KL25 GND 引脚。

更新,忘记写文件名和实际问题

这是我的 DACDriver.c 文件

#include "DACDriver.h"
unsigned char bflgSendingData = 0;
unsigned short* wpSetPattern;
unsigned short wSetPatternSize;

void vfnDACInit()
{
    SIM_SCGC6 |= SIM_SCGC6_DAC0_MASK;
    DAC0_C0 |= DAC_C0_DACRFS_MASK;
    PORTE_PCR30 = PORT_PCR_MUX(0);
    DAC0_DAT0L = 0x00;
    DAC0_DAT0H |= 0x0;
    DAC0_DAT1L = 0xFF;
    DAC0_DAT1H |= 0xF;
    DAC0_C0 |= DAC_C0_DACEN_MASK;
}

void vfnDACSetValue(unsigned short wValue)
{
    DAC0_DAT0L = (unsigned char)(wValue & 0xFF);
    DAC0_DAT0H = (unsigned char)(wValue >> 8);
}

unsigned char bfnDACDriver(void)
{
    vfnDACSetValue(0xFF);
/*This is just a test; in my main, I'm just trying to see an output here.
But the main logic should be like the code below*/
    /*if(bflgSendingData){
        if(wSetPatternSize){
            vfnDACSetValue(wpSetPattern);
            wpSetPattern++;
            wSetPatternSize--;
        }
        return 1;
    }else{
        return 0;
    }
    */
}

unsigned char bfnDACSetPattern(unsigned short* wpPattern, unsigned short wPatternSize)
{
    if(0 == bflgSendingData){
        wpSetPattern = wpPattern;
        wSetPatternSize = wPatternSize;
        bflgSendingData = 1;
        return 1;
    }else{
        return 0;
    }
}

更新,忘记包含这个文件

这是我的 DACDriver.h 文件

#ifndef __DACDRIVER_H_
#define __DACDRIVER_H_
#include "derivative.h"

void vfnDACInit(void);
unsigned char bfnDACDriver(void);
unsigned char bfnDACSetPattern(unsigned short* wpPattern, unsigned short wPatternSize);

#endif /* __DACDRIVER_H_ */

这是我的 main.c 文件,现在只有一点测试,所以我可以看到一些输出

#include "DACDriver.h"
int main(void)
{
    unsigned char pattern[] = {
            0xFF, 0xEF, 0xDF, 0xCF, 0xBF, 0xAF, 
            0x9F, 0x8F, 0x7F, 0x6F, 0x5F, 0x4F, 0x3F, 0x2F, 0x1F, 
            0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 
            0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00};
    vfnDACInit();
    for(;;) {
        bfnDACDriver();
    }
    return 0;
}

我正在努力成为最自学的人,但我的想法已经用完了......

我的主要问题是: 您在这里看到任何错误吗? 我如何使它工作? 我错过了什么吗?

非常感谢!!

【问题讨论】:

  • 1) 对此类任务使用stdint.h 固定位宽类型。硬件寄存器也应该使用它们(否则这会给所提供的标头/源代码的质量留下一些印象)。 2)你的问题是什么? 3) 使用原型声明器。 void vfnDACInit() 不是(你似乎随意混合)。
  • “无输出”是什么意思?我看到从main() 调用的bfnDACDriver() 输出0xFF,忽略了在main() 中定义的unsigned char pattern[] 中的值。
  • 哦,不要将函数或对象定义放在标题中 - 除了 Inline 函数。
  • 0xFF 替换为0x00 会发生什么?你仍然得到“无输出”吗?
  • stdint.h 不是库,而是所有符合标准的 C 编译器提供的头文件。你真的应该使用这些类型,因为它们正是为此而生的,而基本类型也不能保证为有符号值提供特定数量的位或特定编码。关于这个主题:正如@WeatherVane 已经说过的,你没有提供足够的信息。 SO 不是一个远程调试论坛,而是一个问答网站。甚至不清楚您的问题是基于软件还是硬件。

标签: c driver dac


【解决方案1】:

所以我真正的问题是没有看到我的示波器没有正确的电压/时间分辨率,因此可以说是“空”输出。我的司机很好。非常感谢大家回答并关注我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    相关资源
    最近更新 更多