本帖最后由 jinyi7016 于 2016-3-12 04:44 编辑
板子加上的那个风扇现散热片真的是很有用啊,温度真是不低啊。 那么对于风扇不能总是通过gel文件来启动吧,让它自动启动呢。
核心板上有一个温度传感器。型号是TMP102,它是I2C 接口的。 由于核心板上的风扇,就借用手册中的图吧。
由于核心板的原理图是不开放的,看了下手册,使用电路如下图。
Pointer Register 是一个8 位的寄存器,它用来定位其余几个寄存器。Pointer Register 使用两个LSB 如下图,来决定哪一个寄存器去回应读或者写的命令。
TemperatureRegister 是一个12 位(13 位)的只读寄存器,前12 位(或ExtendedMode 时13 位)用来描述温度。温度格式如下:
给TMP102 发一个八位的数据,每一位都是0 ,然后TMP102 就会返回一个16 位的数据,前12 位是温度信息。通讯协议是I2C 。 风扇的电路在底板上,可以看到。要用到GPIO16 与VPIO18.
实时检测芯片温度,当温度高于55时,打开风扇,当温度低于40的时间关闭风扇。程序如下,使用了board的例程。
- #include
- #include
- #include
- #include "platform.h"
- #define SW_BREAKPOINT asm(" SWBP 0 ");
- uint8_t *Osal_platformMalloc(uint32_t num_bytes, uint32_t alignment)
- {
- return malloc(num_bytes);
- }
- void Osal_platformFree(uint8_t *dataPtr, uint32_t num_bytes)
- {
- if (dataPtr) {
- free(dataPtr);
- }
- }
- int main(void)
- {
- int tempsensor;//温度变量
- platform_init_flags init_flags;
- init_flags.ddr = 1;
- init_flags.ecc = 1;
- init_flags.phy = 1;
- init_flags.pll = 1;
- init_flags.tcsl = 1;
- platform_init_config init_config;
- init_config.pllm = 20;
- if (platform_init(&init_flags, &init_config) != Platform_EOK) {//系统初始化
- printf("Platform failed to initialize, error no = 0x%x n",
- platform_errno);
- }
- platform_write_configure(PLATFORM_WRITE_UART);//由串口0输出运行结果
- platform_uart_init(PLATFORM_UART0);//初始化串口0
- platform_uart_set_baudrate(PLATFORM_UART0, 115200);//设置波特率为115200
- platform_uart_write(PLATFORM_UART0, "rnTronlong TL665x-EasyEVM platform test application ......rnrn");
- platform_tempsensor_init();//初始化温度传感器
- for (;;) {
- tempsensor = platform_tempsensor_get();// 获取温度传感器温度值
- platform_write("Temperature %drn", tempsensor);
- if (tempsensor >= 55) {
- platform_write("rnCPU Fan test startrn");
- platform_write("CPU Fan ONrn");
- platform_fan(PLATFORM_FAN_ON);
- }
- else if(tempsensor<=40) {
- platform_write("CPU Fan OFFrn");
- platform_fan(PLATFORM_FAN_OFF);
- platform_write("CPU Fan completern");
- }
- platform_delay(500 * 1000 * 1000);// 延时
- }
- }
复制代码
运行结果。当温度大于55时。 |