GPT12定时器编号
typedef enum // 枚举GPT12 定时器编号
{
GPT12_T2,
GPT12_T3,
GPT12_T4,
GPT12_T5,
GPT12_T6,
}GPTN_enum;
枚举GPT12引脚
//此枚举定义不允许用户修改
typedef enum //枚举GPT12引脚
{
GPT12_T2INA_P00_7, GPT12_T2INB_P33_7, //T2定时器 计数引脚可选范围
GPT12_T2EUDA_P00_8, GPT12_T2EUDB_P33_6, //T2定时器 计数方向引脚可选范围
//在LQFP144封装中没有P10_4 、P10_7
GPT12_T3INA_P02_6, GPT12_T3INB_P10_4, //T3定时器 计数引脚可选范围
GPT12_T3EUDA_P02_7, GPT12_T3EUDB_P10_7, //T3定时器 计数方向引脚可选范围
//在LQFP144封装中没有P10_8
GPT12_T4INA_P02_8, GPT12_T4INB_P10_8, //T4定时器 计数引脚可选范围
GPT12_T4EUDA_P00_9, GPT12_T4EUDB_P33_5, //T4定时器 计数方向引脚可选范围
GPT12_T5INB_P10_3, GPT12_T5INA_P21_7, //T5定时器 计数引脚可选范围
GPT12_T5EUDB_P10_1, GPT12_T5EUDA_P21_6, //T5定时器 计数方向引脚可选范围
//在LQFP144封装中没有P10_0
GPT12_T6INB_P10_2, GPT12_T6INA_P20_3, //T6定时器 计数引脚可选范围
GPT12_T6EUDB_P10_0, GPT12_T6EUDA_P20_0, //T6定时器 计数方向引脚可选范围
}GPT_PIN_enum;
GPT12计数读取(编码器采集)
//-------------------------------------------------------------------------------------------------------------------
// @brief GPT12计数读取(编码器采集)
// @param gptn 选择所使用的GPT12定时器
// @return void
// Sample usage: speed = gpt12_get(GPT12_T2);//使用T2定时器
//-------------------------------------------------------------------------------------------------------------------
int16 gpt12_get(GPTN_enum gptn)
{
switch(gptn)
{
case GPT12_T2: return (int16)IfxGpt12_T2_getTimerValue(&MODULE_GPT120);
case GPT12_T3: return (int16)IfxGpt12_T3_getTimerValue(&MODULE_GPT120);
case GPT12_T4: return (int16)IfxGpt12_T4_getTimerValue(&MODULE_GPT120);
case GPT12_T5: return (int16)IfxGpt12_T5_getTimerValue(&MODULE_GPT120);
case GPT12_T6: return (int16)IfxGpt12_T6_getTimerValue(&MODULE_GPT120);
default: return 0;
}
}
清除GPT12计数(编码器采集)
//-------------------------------------------------------------------------------------------------------------------
// @brief 清除GPT12计数(编码器采集)
// @param gptn 选择所使用的GPT12定时器
// @return void
// Sample usage: gpt12_clear(GPT12_T2);//使用T2定时器
//-------------------------------------------------------------------------------------------------------------------
void gpt12_clear(GPTN_enum gptn)
{
switch(gptn)
{
case GPT12_T2: IfxGpt12_T2_setTimerValue(&MODULE_GPT120, 0); break;
case GPT12_T3: IfxGpt12_T3_setTimerValue(&MODULE_GPT120, 0); break;
case GPT12_T4: IfxGpt12_T4_setTimerValue(&MODULE_GPT120, 0); break;
case GPT12_T5: IfxGpt12_T5_setTimerValue(&MODULE_GPT120, 0); break;
case GPT12_T6: IfxGpt12_T6_setTimerValue(&MODULE_GPT120, 0); break;
}
}
串口的发送与中断接受
#include "headfile.h"
#pragma section all "cpu0_dsram"
uint8 uart_buff;
int core0_main(void)
{
disableInterrupts();
get_clk();//获取时钟频率 务必保留
//用户在此处调用各种初始化函数等
uart_init(UART_0, 115200, UART0_TX_P14_0, UART0_RX_P14_1);
//在本库中,对于串口的接收与发送都是通过中断完成的,因此想要正常的使用串口功能务必保证中断是开启的,也就是调用了enableInterrupts()
enableInterrupts();
//调用enableInterrupts函数之后 才开始发送或者接收数据
uart_putstr(UART_0, "n---uart test---n");
//串口的中断函数全部都在isr.c中。
//串口中断相关的配置参数都在isr_config.h中
//可配置参数有 ERU_CH0_CH4_INT_SERVICE 和 ERU_CH0_CH4_INT_PRIO
//UART0_INT_SERVICE 中断服务者,表示改中断由谁处理,0:CPU0 1:CPU1 3:DMA 不可设置为其他值
//UART0_TX_INT_PRIO 发送中断优先级 优先级范围1-255 越大优先级越高 与平时使用的单片机不一样
//UART0_RX_INT_PRIO 接收中断优先级
//UART0_ER_INT_PRIO 错误中断优先级
//其他串口中断参数同理
//需要特备注意的是 不可以有优先级相同的中断函数 每个中断的优先级都必须是不一样的
while (TRUE)
{
//查询是否有数据,如果有则接收
if(uart_query(UART_0, &uart_buff))
{
//将收到的数据,再发出去
uart_putchar(UART_0, uart_buff);
}
//使用u***转ttl连接单片机的串口,在电脑上打开串口助手,任意发送字符,
//单片机收到后会返回发送的字符,串口助手就会显示刚才发送的东西
}
}
#pragma section all restore
串口初始化
//-------------------------------------------------------------------------------------------------------------------
// @brief 串口初始化
// @param uartn 串口模块号(UART_0,UART_1,UART_2,UART_3)
// @param baud 串口波特率
// @param tx_pin 串口发送引脚
// @param rx_pin 串口接收引脚
// @return uint32 实际波特率
// Sample usage: uart_init(UART_0,115200,UART0_TX_P14_0,UART0_RX_P14_1); // 初始化串口0 波特率115200 发送引脚使用P14_0 接收引脚使用P14_1
//-------------------------------------------------------------------------------------------------------------------
void uart_init(UARTN_enum uartn, uint32 baud, UART_PIN_enum tx_pin, UART_PIN_enum rx_pin)
{
boolean interrupt_state = disableInterrupts();
volatile Ifx_ASCLIN *moudle = IfxAsclin_getAddress((IfxAsclin_Index)uartn);
IfxAsclin_Asc_initModuleConfig(&uart_config, moudle); //初始化化配置结构体
uart_set_buffer(uartn);//设置缓冲区
uart_set_interrupt_priority(uartn);//设置中断优先级
uart_config.baudrate.prescaler = 4;
uart_config.baudrate.baudrate = (float32)baud;
uart_config.baudrate.oversampling = IfxAsclin_OversamplingFactor_8;
IfxAsclin_Asc_Pins pins;//设置引脚
pins.cts = NULL;
pins.rts = NULL;
uart_mux(uartn, tx_pin, rx_pin, (uint32 *)&pins.tx, (uint32 *)&pins.rx);
pins.rxMode = IfxPort_InputMode_pullUp;
pins.txMode = IfxPort_OutputMode_pushPull;
pins.pinDriver = IfxPort_PadDriver_cmosAutomotiveSpeed1;
uart_config.pins = &pins;
IfxAsclin_Asc_initModule(uart_get_handle(uartn), &uart_config);
restoreInterrupts(interrupt_state);
}
GPIO中断参数相关定义
//------------GPIO中断参数相关定义------------
//通道0与通道4是公用一个中断函数 在中断内部通过标志位判断是谁触发的中断
#define ERU_CH0_CH4_INT_SERVICE 0 //定义ERU通道0和通道4中断服务类型,即中断是由谁响应处理 0:CPU0 1:CPU1 3:DMA 不可设置为其他值
#define ERU_CH0_CH4_INT_PRIO 40 //定义ERU通道0和通道4中断优先级 优先级范围1-255 越大优先级越高 与平时使用的单片机不一样
//通道1与通道5是公用一个中断函数 在中断内部通过标志位判断是谁触发的中断
#define ERU_CH1_CH5_INT_SERVICE 0 //定义ERU通道1和通道5中断服务类型,同上
#define ERU_CH1_CH5_INT_PRIO 41 //定义ERU通道1和通道5中断优先级 同上
//通道2与通道6是公用一个中断函数 在中断内部通过标志位判断是谁触发的中断
#define ERU_CH2_CH6_INT_SERVICE 3 //定义ERU通道2和通道6中断服务类型,同上
#define ERU_CH2_CH6_INT_PRIO 5 //定义ERU通道2和通道6中断优先级 同上
//通道3与通道7是公用一个中断函数 在中断内部通过标志位判断是谁触发的中断
#define ERU_CH3_CH7_INT_SERVICE 0 //定义ERU通道3和通道7中断服务类型,同上
#define ERU_CH3_CH7_INT_PRIO 43 //定义ERU通道3和通道7中断优先级 同上
读取串口接收的数据(查询接收)
//-------------------------------------------------------------------------------------------------------------------
// @brief 读取串口接收的数据(查询接收)
// @param uartn 串口模块号(UART_0,UART_1,UART_2,UART_3)
// @param *dat 接收数据的地址
// @return uint8 1:接收成功 0:未接收到数据
// Sample usage: uint8 dat; uart_query(UART_0,&dat); // 接收串口0数据 存在在dat变量里
//-------------------------------------------------------------------------------------------------------------------
uint8 uart_query(UARTN_enum uartn, uint8 *dat)
{
if(IfxAsclin_Asc_getReadCount(uart_get_handle(uartn)) >0)
{
*dat = IfxAsclin_Asc_blockingRead(uart_get_handle(uartn));
return 1;
}
return 0;
}
串口字节输出
//-------------------------------------------------------------------------------------------------------------------
// @brief 串口字节输出
// @param uartn 串口模块号(UART_0,UART_1,UART_2,UART_3)
// @param dat 需要发送的字节
// @return void
// Sample usage: uart_putchar(UART_0, 0xA5); // 串口0发送0xA5
//-------------------------------------------------------------------------------------------------------------------
void uart_putchar(UARTN_enum uartn, uint8 dat)
{
// IfxAsclin_Asc_blockingWrite(uart_get_handle(uartn),dat);
Ifx_SizeT count = 1;
(void)IfxAsclin_Asc_write(uart_get_handle(uartn), &dat, &count, TIME_INFINITE);
}
串口发送数组
//-------------------------------------------------------------------------------------------------------------------
// @brief 串口发送数组
// @param uartn 串口模块号(UART_0,UART_1,UART_2,UART_3)
// @param *buff 要发送的数组地址
// @param len 发送长度
// @return void
// Sample usage: uart_putbuff(UART_0,&a[0],5);
//-------------------------------------------------------------------------------------------------------------------
void uart_putbuff(UARTN_enum uartn, uint8 *buff, uint32 len)
{
while(len)
{
uart_putchar(uartn, *buff);
len--;
buff++;
}
}
串口发送字符串
//-------------------------------------------------------------------------------------------------------------------
// @brief 串口发送字符串
// @param uartn 串口模块号(UART_0,UART_1,UART_2,UART_3)
// @param *str 要发送的字符串地址
// @return void
// Sample usage: uart_putstr(UART_0,"i lvoe you");
//-------------------------------------------------------------------------------------------------------------------
void uart_putstr(UARTN_enum uartn, const int8 *str)
{
while(*str)
{
uart_putchar(uartn, *str++);
}
}
Printf函数打印
#include "headfile.h"
#pragma section all "cpu0_dsram"
uint16 num;
int core0_main(void)
{
disableInterrupts();
get_clk();//获取时钟频率 务必保留
//用户在此处调用各种初始化函数等
printf("printf demon");
enableInterrupts();
while (TRUE)
{
num++;
printf("printf num :%dn", num);
systick_delay_ms(STM0, 100);
//注意事项1 printf打印的数据会通过串口发送出去
//注意事项2 printf所使用的串口和波特率可以在TC264_config.h文件中修改
//注意事项3 printf所使用的串口默认在get_clk函数中进行了初始化,如果不想使用printf则可以在TC264_config.h文件中将PRINTF_ENABLE宏定义设置为0即可
}
}
#pragma section all restore
GPIO触发中断
#include "headfile.h"
#pragma section all "cpu0_dsram"
int core0_main(void)
{
disableInterrupts();
get_clk();//获取时钟频率 务必保留
//用户在此处调用各种初始化函数等
//特别注意通道2 与 通道3都被摄像头占用,由于中断共用的关系,因此通道6 与 通道7也不能使用
//TC264的外部中断不像K60单片机那样所有IO都支持,TC264只有部分支持具体可以查看***_eru.h中ERU_PIN_enum枚举定义
eru_init(ERU_CH0_REQ0_P15_4, RISING); //ERU通道0 使用P15_4引脚 上升沿中断
eru_init(ERU_CH4_REQ13_P15_5, RISING); //ERU通道4 使用P15_5引脚 上升沿中断
//通道0与4共用中断,中断内通过标志位判断
eru_init(ERU_CH1_REQ10_P14_3, RISING); //ERU通道1 使用P14_3引脚 上升沿中断
eru_init(ERU_CH5_REQ1_P15_8, RISING); //ERU通道5 使用P15_8引脚 上升沿中断
//通道1与5共用中断,中断内通过标志位判断
//中断函数在isr.c中
//函数名称分别为eru_ch0_ch4_isr 与 eru_ch1_ch5_isr
//中断相关的配置参数在isr_config.h内
//可配置参数有 ERU_CH0_CH4_INT_SERVICE 和 ERU_CH0_CH4_INT_PRIO
//ERU_CH0_CH4_INT_SERVICE 中断服务者,表示改中断由谁处理,0:CPU0 1:CPU1 3:DMA 不可设置为其他值
//ERU_CH0_CH4_INT_PRIO 中断优先级 优先级范围1-255 越大优先级越高 与平时使用的单片机不一样
//ERU其他中断也是同理
//需要特备注意的是 不可以有优先级相同的中断函数 每个中断的优先级都必须是不一样的
enableInterrupts();
while (TRUE)
{
//在isr.c的中断函数,函数定义的第二个参数固定为0,请不要更改,即使你用CPU1处理中断也不要更改,需要CPU1处理中断只需要在isr_config.h内修改对应的宏定义即可
//程序运行之后,使用杜邦线将P15_4、P15_5、P14_3、P15_8连接到GND,然后在断开,在连接如此往复
//将提示信息通过串口打印,可以先学习printf例程,了解如何使用printf
}
}
#pragma section all restore
GPT12定时器编号
typedef enum // 枚举GPT12 定时器编号
{
GPT12_T2,
GPT12_T3,
GPT12_T4,
GPT12_T5,
GPT12_T6,
}GPTN_enum;
枚举GPT12引脚
//此枚举定义不允许用户修改
typedef enum //枚举GPT12引脚
{
GPT12_T2INA_P00_7, GPT12_T2INB_P33_7, //T2定时器 计数引脚可选范围
GPT12_T2EUDA_P00_8, GPT12_T2EUDB_P33_6, //T2定时器 计数方向引脚可选范围
//在LQFP144封装中没有P10_4 、P10_7
GPT12_T3INA_P02_6, GPT12_T3INB_P10_4, //T3定时器 计数引脚可选范围
GPT12_T3EUDA_P02_7, GPT12_T3EUDB_P10_7, //T3定时器 计数方向引脚可选范围
//在LQFP144封装中没有P10_8
GPT12_T4INA_P02_8, GPT12_T4INB_P10_8, //T4定时器 计数引脚可选范围
GPT12_T4EUDA_P00_9, GPT12_T4EUDB_P33_5, //T4定时器 计数方向引脚可选范围
GPT12_T5INB_P10_3, GPT12_T5INA_P21_7, //T5定时器 计数引脚可选范围
GPT12_T5EUDB_P10_1, GPT12_T5EUDA_P21_6, //T5定时器 计数方向引脚可选范围
//在LQFP144封装中没有P10_0
GPT12_T6INB_P10_2, GPT12_T6INA_P20_3, //T6定时器 计数引脚可选范围
GPT12_T6EUDB_P10_0, GPT12_T6EUDA_P20_0, //T6定时器 计数方向引脚可选范围
}GPT_PIN_enum;
GPT12计数读取(编码器采集)
//-------------------------------------------------------------------------------------------------------------------
// @brief GPT12计数读取(编码器采集)
// @param gptn 选择所使用的GPT12定时器
// @return void
// Sample usage: speed = gpt12_get(GPT12_T2);//使用T2定时器
//-------------------------------------------------------------------------------------------------------------------
int16 gpt12_get(GPTN_enum gptn)
{
switch(gptn)
{
case GPT12_T2: return (int16)IfxGpt12_T2_getTimerValue(&MODULE_GPT120);
case GPT12_T3: return (int16)IfxGpt12_T3_getTimerValue(&MODULE_GPT120);
case GPT12_T4: return (int16)IfxGpt12_T4_getTimerValue(&MODULE_GPT120);
case GPT12_T5: return (int16)IfxGpt12_T5_getTimerValue(&MODULE_GPT120);
case GPT12_T6: return (int16)IfxGpt12_T6_getTimerValue(&MODULE_GPT120);
default: return 0;
}
}
清除GPT12计数(编码器采集)
//-------------------------------------------------------------------------------------------------------------------
// @brief 清除GPT12计数(编码器采集)
// @param gptn 选择所使用的GPT12定时器
// @return void
// Sample usage: gpt12_clear(GPT12_T2);//使用T2定时器
//-------------------------------------------------------------------------------------------------------------------
void gpt12_clear(GPTN_enum gptn)
{
switch(gptn)
{
case GPT12_T2: IfxGpt12_T2_setTimerValue(&MODULE_GPT120, 0); break;
case GPT12_T3: IfxGpt12_T3_setTimerValue(&MODULE_GPT120, 0); break;
case GPT12_T4: IfxGpt12_T4_setTimerValue(&MODULE_GPT120, 0); break;
case GPT12_T5: IfxGpt12_T5_setTimerValue(&MODULE_GPT120, 0); break;
case GPT12_T6: IfxGpt12_T6_setTimerValue(&MODULE_GPT120, 0); break;
}
}
串口的发送与中断接受
#include "headfile.h"
#pragma section all "cpu0_dsram"
uint8 uart_buff;
int core0_main(void)
{
disableInterrupts();
get_clk();//获取时钟频率 务必保留
//用户在此处调用各种初始化函数等
uart_init(UART_0, 115200, UART0_TX_P14_0, UART0_RX_P14_1);
//在本库中,对于串口的接收与发送都是通过中断完成的,因此想要正常的使用串口功能务必保证中断是开启的,也就是调用了enableInterrupts()
enableInterrupts();
//调用enableInterrupts函数之后 才开始发送或者接收数据
uart_putstr(UART_0, "n---uart test---n");
//串口的中断函数全部都在isr.c中。
//串口中断相关的配置参数都在isr_config.h中
//可配置参数有 ERU_CH0_CH4_INT_SERVICE 和 ERU_CH0_CH4_INT_PRIO
//UART0_INT_SERVICE 中断服务者,表示改中断由谁处理,0:CPU0 1:CPU1 3:DMA 不可设置为其他值
//UART0_TX_INT_PRIO 发送中断优先级 优先级范围1-255 越大优先级越高 与平时使用的单片机不一样
//UART0_RX_INT_PRIO 接收中断优先级
//UART0_ER_INT_PRIO 错误中断优先级
//其他串口中断参数同理
//需要特备注意的是 不可以有优先级相同的中断函数 每个中断的优先级都必须是不一样的
while (TRUE)
{
//查询是否有数据,如果有则接收
if(uart_query(UART_0, &uart_buff))
{
//将收到的数据,再发出去
uart_putchar(UART_0, uart_buff);
}
//使用u***转ttl连接单片机的串口,在电脑上打开串口助手,任意发送字符,
//单片机收到后会返回发送的字符,串口助手就会显示刚才发送的东西
}
}
#pragma section all restore
串口初始化
//-------------------------------------------------------------------------------------------------------------------
// @brief 串口初始化
// @param uartn 串口模块号(UART_0,UART_1,UART_2,UART_3)
// @param baud 串口波特率
// @param tx_pin 串口发送引脚
// @param rx_pin 串口接收引脚
// @return uint32 实际波特率
// Sample usage: uart_init(UART_0,115200,UART0_TX_P14_0,UART0_RX_P14_1); // 初始化串口0 波特率115200 发送引脚使用P14_0 接收引脚使用P14_1
//-------------------------------------------------------------------------------------------------------------------
void uart_init(UARTN_enum uartn, uint32 baud, UART_PIN_enum tx_pin, UART_PIN_enum rx_pin)
{
boolean interrupt_state = disableInterrupts();
volatile Ifx_ASCLIN *moudle = IfxAsclin_getAddress((IfxAsclin_Index)uartn);
IfxAsclin_Asc_initModuleConfig(&uart_config, moudle); //初始化化配置结构体
uart_set_buffer(uartn);//设置缓冲区
uart_set_interrupt_priority(uartn);//设置中断优先级
uart_config.baudrate.prescaler = 4;
uart_config.baudrate.baudrate = (float32)baud;
uart_config.baudrate.oversampling = IfxAsclin_OversamplingFactor_8;
IfxAsclin_Asc_Pins pins;//设置引脚
pins.cts = NULL;
pins.rts = NULL;
uart_mux(uartn, tx_pin, rx_pin, (uint32 *)&pins.tx, (uint32 *)&pins.rx);
pins.rxMode = IfxPort_InputMode_pullUp;
pins.txMode = IfxPort_OutputMode_pushPull;
pins.pinDriver = IfxPort_PadDriver_cmosAutomotiveSpeed1;
uart_config.pins = &pins;
IfxAsclin_Asc_initModule(uart_get_handle(uartn), &uart_config);
restoreInterrupts(interrupt_state);
}
GPIO中断参数相关定义
//------------GPIO中断参数相关定义------------
//通道0与通道4是公用一个中断函数 在中断内部通过标志位判断是谁触发的中断
#define ERU_CH0_CH4_INT_SERVICE 0 //定义ERU通道0和通道4中断服务类型,即中断是由谁响应处理 0:CPU0 1:CPU1 3:DMA 不可设置为其他值
#define ERU_CH0_CH4_INT_PRIO 40 //定义ERU通道0和通道4中断优先级 优先级范围1-255 越大优先级越高 与平时使用的单片机不一样
//通道1与通道5是公用一个中断函数 在中断内部通过标志位判断是谁触发的中断
#define ERU_CH1_CH5_INT_SERVICE 0 //定义ERU通道1和通道5中断服务类型,同上
#define ERU_CH1_CH5_INT_PRIO 41 //定义ERU通道1和通道5中断优先级 同上
//通道2与通道6是公用一个中断函数 在中断内部通过标志位判断是谁触发的中断
#define ERU_CH2_CH6_INT_SERVICE 3 //定义ERU通道2和通道6中断服务类型,同上
#define ERU_CH2_CH6_INT_PRIO 5 //定义ERU通道2和通道6中断优先级 同上
//通道3与通道7是公用一个中断函数 在中断内部通过标志位判断是谁触发的中断
#define ERU_CH3_CH7_INT_SERVICE 0 //定义ERU通道3和通道7中断服务类型,同上
#define ERU_CH3_CH7_INT_PRIO 43 //定义ERU通道3和通道7中断优先级 同上
读取串口接收的数据(查询接收)
//-------------------------------------------------------------------------------------------------------------------
// @brief 读取串口接收的数据(查询接收)
// @param uartn 串口模块号(UART_0,UART_1,UART_2,UART_3)
// @param *dat 接收数据的地址
// @return uint8 1:接收成功 0:未接收到数据
// Sample usage: uint8 dat; uart_query(UART_0,&dat); // 接收串口0数据 存在在dat变量里
//-------------------------------------------------------------------------------------------------------------------
uint8 uart_query(UARTN_enum uartn, uint8 *dat)
{
if(IfxAsclin_Asc_getReadCount(uart_get_handle(uartn)) >0)
{
*dat = IfxAsclin_Asc_blockingRead(uart_get_handle(uartn));
return 1;
}
return 0;
}
串口字节输出
//-------------------------------------------------------------------------------------------------------------------
// @brief 串口字节输出
// @param uartn 串口模块号(UART_0,UART_1,UART_2,UART_3)
// @param dat 需要发送的字节
// @return void
// Sample usage: uart_putchar(UART_0, 0xA5); // 串口0发送0xA5
//-------------------------------------------------------------------------------------------------------------------
void uart_putchar(UARTN_enum uartn, uint8 dat)
{
// IfxAsclin_Asc_blockingWrite(uart_get_handle(uartn),dat);
Ifx_SizeT count = 1;
(void)IfxAsclin_Asc_write(uart_get_handle(uartn), &dat, &count, TIME_INFINITE);
}
串口发送数组
//-------------------------------------------------------------------------------------------------------------------
// @brief 串口发送数组
// @param uartn 串口模块号(UART_0,UART_1,UART_2,UART_3)
// @param *buff 要发送的数组地址
// @param len 发送长度
// @return void
// Sample usage: uart_putbuff(UART_0,&a[0],5);
//-------------------------------------------------------------------------------------------------------------------
void uart_putbuff(UARTN_enum uartn, uint8 *buff, uint32 len)
{
while(len)
{
uart_putchar(uartn, *buff);
len--;
buff++;
}
}
串口发送字符串
//-------------------------------------------------------------------------------------------------------------------
// @brief 串口发送字符串
// @param uartn 串口模块号(UART_0,UART_1,UART_2,UART_3)
// @param *str 要发送的字符串地址
// @return void
// Sample usage: uart_putstr(UART_0,"i lvoe you");
//-------------------------------------------------------------------------------------------------------------------
void uart_putstr(UARTN_enum uartn, const int8 *str)
{
while(*str)
{
uart_putchar(uartn, *str++);
}
}
Printf函数打印
#include "headfile.h"
#pragma section all "cpu0_dsram"
uint16 num;
int core0_main(void)
{
disableInterrupts();
get_clk();//获取时钟频率 务必保留
//用户在此处调用各种初始化函数等
printf("printf demon");
enableInterrupts();
while (TRUE)
{
num++;
printf("printf num :%dn", num);
systick_delay_ms(STM0, 100);
//注意事项1 printf打印的数据会通过串口发送出去
//注意事项2 printf所使用的串口和波特率可以在TC264_config.h文件中修改
//注意事项3 printf所使用的串口默认在get_clk函数中进行了初始化,如果不想使用printf则可以在TC264_config.h文件中将PRINTF_ENABLE宏定义设置为0即可
}
}
#pragma section all restore
GPIO触发中断
#include "headfile.h"
#pragma section all "cpu0_dsram"
int core0_main(void)
{
disableInterrupts();
get_clk();//获取时钟频率 务必保留
//用户在此处调用各种初始化函数等
//特别注意通道2 与 通道3都被摄像头占用,由于中断共用的关系,因此通道6 与 通道7也不能使用
//TC264的外部中断不像K60单片机那样所有IO都支持,TC264只有部分支持具体可以查看***_eru.h中ERU_PIN_enum枚举定义
eru_init(ERU_CH0_REQ0_P15_4, RISING); //ERU通道0 使用P15_4引脚 上升沿中断
eru_init(ERU_CH4_REQ13_P15_5, RISING); //ERU通道4 使用P15_5引脚 上升沿中断
//通道0与4共用中断,中断内通过标志位判断
eru_init(ERU_CH1_REQ10_P14_3, RISING); //ERU通道1 使用P14_3引脚 上升沿中断
eru_init(ERU_CH5_REQ1_P15_8, RISING); //ERU通道5 使用P15_8引脚 上升沿中断
//通道1与5共用中断,中断内通过标志位判断
//中断函数在isr.c中
//函数名称分别为eru_ch0_ch4_isr 与 eru_ch1_ch5_isr
//中断相关的配置参数在isr_config.h内
//可配置参数有 ERU_CH0_CH4_INT_SERVICE 和 ERU_CH0_CH4_INT_PRIO
//ERU_CH0_CH4_INT_SERVICE 中断服务者,表示改中断由谁处理,0:CPU0 1:CPU1 3:DMA 不可设置为其他值
//ERU_CH0_CH4_INT_PRIO 中断优先级 优先级范围1-255 越大优先级越高 与平时使用的单片机不一样
//ERU其他中断也是同理
//需要特备注意的是 不可以有优先级相同的中断函数 每个中断的优先级都必须是不一样的
enableInterrupts();
while (TRUE)
{
//在isr.c的中断函数,函数定义的第二个参数固定为0,请不要更改,即使你用CPU1处理中断也不要更改,需要CPU1处理中断只需要在isr_config.h内修改对应的宏定义即可
//程序运行之后,使用杜邦线将P15_4、P15_5、P14_3、P15_8连接到GND,然后在断开,在连接如此往复
//将提示信息通过串口打印,可以先学习printf例程,了解如何使用printf
}
}
#pragma section all restore
举报