如何在Colibri T20计算机模块上使用S/PDIF 音频输出

2014年6月23日星期一

 

Apalis, Colibri, WindowsColibri T20 计算机模块使用 NVIDIA's Tegra 2 ARM Cortex A9 双核处理器,该模块是高性能、低功耗应用的理想选择。Colibri T20 计算机模块 拥有片上 S/PDIF(Sony/Philips Digital Interface) 单元 这使得T20能够除了输出模拟音频外还可以输出数字音频。.

 

如何使用S/PDIF功能?

如果你使用HDMI显示器,可以将HOTPLUG_DET引脚拉高,激活S/PDIF功能。如果没有使用HDMI显示器,需要通过以下代码来激活:

// MixerSetOutputDevice.cpp : Defines the entry point for the console application.
 
#include <windows.h>
#include <winioctl.h>
 
//=============================================================================
// definitions for the MIX_MESSAGE IoControl
#define IOCTL_MIX_MESSAGE \ CTL_CODE((ULONG)0x8000, 0x0040, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
 
// Definitions for the Nvidia SET_OUTPUT_DEVICE feature
#define MXDM_SET_OUTPUT_DEVICE (112)
#define WaveOutDevice_HDMI (4)
 
typedef struct {
    UINT uDeviceId;
    UINT uMsg;          // set to MXDM_SET_OUTPUT_DEVICE
    DWORD dwUser;
    DWORD dwParam1;     // set to WaveOutDevice_HDMI
    DWORD dwParam2;
} MMDRV_MESSAGE_PARAMS;
 
//=============================================================================
 
int _tmain(int argc, _TCHAR* argv[])
{
    HANDLE                  hWAV        = INVALID_HANDLE_VALUE; 
    DWORD                   ret; 
    MMDRV_MESSAGE_PARAMS    mixerParams = {0, MXDM_SET_OUTPUT_DEVICE, 0, WaveOutDevice_HDMI, 0};
    DWORD                   outBuf;
    DWORD                   outSize;
 
    hWAV = CreateFile(L"WAV1:", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
 
    ret = DeviceIoControl(hWAV, IOCTL_MIX_MESSAGE, &mixerParams, sizeof(mixerParams), &outBuf , sizeof(outBuf), &outSize, NULL );
    if (!ret)
        printf("error in DeviceIoControl: %d, LastError=%d\r\n", ret, GetLastError());
 
    CloseHandle(hWAV);
    return 0;
}

如何配置SPDIF_OUT引脚?

在Colibri T20上可以使用以下几个引脚作为SPDIF_OUT:
GPIO
AltFn#
SODIMM Pin
 C3
 1
 19
 D4
 0 
 92
 K5
 0
 137
其中任何一个引脚都可以作为SPDIF_OUT。
请注意, SPDIF_OUT功能不兼容于其他Colibri 模块。 上面列表中的引脚,在其他Colibri模块的兼容配置中均用作其他用途。 你可以使用GPIOConfig 工具 改变SPDIF_OUT的引脚功能。为了在每次系统启动的时候改变引脚的功能, 我们建议将相应的代码放入应用程序中,例如使用 GPIOLib库的SetPinAltFn() API。.
#Arm based Development #Arm Cortex™-A9 #Colibri Arm Family #Computer on Module #Embedded Computing #NVIDIA® Tegra™