XMOS笔记1--LED的控制

1、port的输出
首先是led是4*4矩阵。
硬件驱动说明,行的控制是PMOS驱动,低电平有效,列的控制是NMOS驱动,高电平有效。


引脚映射:
行:XS1_PORT_4C,列:XS1_PORT_4D。
引脚:

行:
LED_ROW_0----X1D14
LED_ROW_1----X1D15
LED_ROW_2----X1D20
LED_ROW_3----X1D21

列:
LED_COL_0----X1D16
LED_COL_1----X1D17
LED_COL_2----X1D18
LED_COL_3----X1D19

/******************************************正确运行程序***********************************************/

#include "xs1.h"
#include "stdio.h"
#include <platform.h>

on tile[1]: out  port led_row = XS1_PORT_4C;//映射port引脚,且指定在tile[1]上的port
on tile[1]: out  port led_col = XS1_PORT_4D; //映射port引脚,且指定在tile[1]上的port


void led(void)
{
    while(1)
    {
        led_row <: 0x0; //置低电位   
        led_col <: 0xF; //置高电位
    }

}

int main(void)
{
    
    par
    {
        on tile[1]: led();
    }
    
    return 0;
}

/********************************************************************************/
首先如果一开始在端口声明中带了“on tile[1]:”,而在调用port的操作函数时没有指定tile,那么编译器就会报错。

例如:在全局中,声明了:on tile[1]: out  port led_row = XS1_PORT_4C;
                                           on tile[1]: out  port led_col  = XS1_PORT_4D;

然后主函数中,没有用到或者是led();函数前没有加“on tile[1]:”,那么就会报错。

报错如下:

报错:Error: Resource "led_row" placed on "tile[1]" will not be initialised without a multi-tile main function.

解决办法:

led_row和led_col指定on tile[1]运行的port,加上“on tile[1]:”,重新编译就可以了。问题就处在你指定了芯片的tile的硬件资源却没有用它,编译器就会认定为违规。

这种情况主要发生在多core的芯片上,因为单Core的芯片上port 默认在tile[0]上。

简而言之就是在port的映射上,首先要查看port映射表,看所用到的引脚在哪个块上。(注解:引脚标号 XnDpq, n 指代芯片上xCore上的标号,pq 为引脚标号。)

例如上面用到的 XS1_PORT_4C 指代的引脚为4 bit 的port,该port指代了(X1D14、X1D15、X1D20、X1D21 这4个引脚。这也是XMOS和其他单片机之间所不同的地方,这个主要是因为XMOS的底层硬件框架的不同所确定的)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值