这个需要主从约定,IIC接收无法区分地址和数据
华子 发布的帖子
-
RE: 可以编译连接,但不能仿真
1、检查Jlink连接是否正确
2、FR8016H中是否进入sleep,sleep模式下 是无法仿真的
3、PC6 PC7是否mux为其他外设 -
RE: 请教如何运用低功耗管理
@鱼的记忆 在 请教如何运用低功耗管理 中说:
系统重启后能进入低功耗,电流为 20uA左右
过上20s左右,系统会退出低功耗,电流为 3mA左右,再也进入不了低功耗?
问题2:如果让BLE进入广播模式,系统无法进入低功耗模式,使用原始的广播配置,这个时候无法进入低功耗,电流一直在3mA左右?
我想做个定时广播,广播完没有任何操作进入睡眠模式,还有就是进入睡眠模式广播怎样唤醒它正常程序中没有调用system_sleep_disable();的话 默认系统会自动进入sleep;
可以通过os_timer唤醒 -
RE: 请教如何运用低功耗管理
attribute((section("ram_code"))) void user_entry_before_sleep_imp(void)
{
uart_putc_noint_no_wait(UART1, 's');
}
attribute((section("ram_code"))) void user_entry_after_sleep_imp(void)
{
/* set PA2 and PA3 for AT command interface */system_set_port_mux(GPIO_PORT_A, GPIO_BIT_3, PORTA3_FUNC_UART1_TXD);
// system_sleep_disable();
if(__jump_table.system_option & SYSTEM_OPTION_ENABLE_HCI_MODE) { system_set_port_pull(GPIO_PA4, true); system_set_port_mux(GPIO_PORT_A, GPIO_BIT_4, PORTA4_FUNC_UART0_RXD); system_set_port_mux(GPIO_PORT_A, GPIO_BIT_5, PORTA5_FUNC_UART0_TXD); uart_init(UART0, BAUD_RATE_115200); NVIC_EnableIRQ(UART0_IRQn); system_sleep_disable(); } uart_init(UART1, BAUD_RATE_115200); NVIC_EnableIRQ(UART1_IRQn); //uart_putc_noint_no_wait(UART1, 'w'); // Do some things here, can be uart print NVIC_EnableIRQ(PMU_IRQn);
}
-
RE: 8016HA开发板LED2蓝灯如何点亮
修改一下pmu_set_led2_value函数,该函数修改后会影响sleep下的功耗
if( value == 0 )
{
ool_write(PMU_REG_LED_CTRL, 0x00);
}
else
{
ool_write(PMU_REG_LED_CTRL, 0x04 );
} -
RE: 如何阻止系统进入低功耗模式?
__jump_table.system_option &= ~(SYSTEM_OPTION_SLEEP_ENABLE);//取消sleep模式
-
RE: iic从机
@whp “发现I2C从机没有trans_done_ie中断
加了iic_reg->control.trans_done_ie = 1;”
从机没有trans_done_ie,建议从机发送的时候使能slv_noful_ie,通过slv_trans_ful检测slave fifo非满,实现中断发送 -
RE: iic从机
void iic_init(enum iic_channel_t channel, uint16_t speed, uint16_t slave_addr)
{
volatile struct iic_reg_t *iic_reg;if(channel == IIC_CHANNEL_0)
{
iic_reg = IIC0_REG_BASE;
}
else
{
iic_reg = IIC1_REG_BASE;
}iic_reg->clkdiv.clk_div = (system_get_pclk_config()*1000/speed-10)/2;
iic_reg->control.soft_reset = 1;
iic_reg->control.seven_bit = 1;
iic_reg->address.slv_addr = slave_addr;iic_byte_period[channel] = 1000/speed + 1;
//enable interrupt
iic_reg->control.rec_noemp_ie = 1;//接收fifo非空中断
iic_reg->control.slv_noful_ie = 1;//从机发送fifo不满中断
NVIC_EnableIRQ(IIC0_IRQn);
}void iic0_isr(void)
{
volatile struct iic_reg_t *iic_reg = IIC0_REG_BASE;
uint8_t data;if(iic_reg->status.rec_emp == 0)//接收fifo非空
{
iic_test_reg_addr = iic_reg->data;//从机接收数据
co_printf("%d rec_data = %d \r\n",iic_master_data_rx_cnt++,iic_test_reg_addr);
}
else if(iic_reg->status.slv_trans_ful ==0){//从机发送fifo不满
while(iic_reg->status.slv_trans_ful ==0){
data = rand() & 0xFF;//从机发送随机数据
iic_reg->slavedata.slave_data = data;//iic_slave_data_Tx_buffer[iic_slave_data_Tx_cnt++];
co_printf("send %d.\r\n", data);
}
}
} -
RE: IIC从机
void iic_init(enum iic_channel_t channel, uint16_t speed, uint16_t slave_addr)
{
volatile struct iic_reg_t *iic_reg;if(channel == IIC_CHANNEL_0) { iic_reg = IIC0_REG_BASE; } else { iic_reg = IIC1_REG_BASE; } iic_reg->clkdiv.clk_div = (system_get_pclk_config()*1000/speed-10)/2; iic_reg->control.soft_reset = 1; iic_reg->control.seven_bit = 1; iic_reg->address.slv_addr = slave_addr; iic_byte_period[channel] = 1000/speed + 1; //enable interrupt iic_reg->control.rec_noemp_ie = 1;//接收fifo非空中断 iic_reg->control.slv_noful_ie = 1;//从机发送fifo不满中断 NVIC_EnableIRQ(IIC0_IRQn);
}
void iic0_isr(void)
{
volatile struct iic_reg_t *iic_reg = IIC0_REG_BASE;
uint8_t data;if(iic_reg->status.rec_emp == 0)//接收fifo非空 { iic_test_reg_addr = iic_reg->data;//从机接收数据 co_printf("%d rec_data = %d \r\n",iic_master_data_rx_cnt++,iic_test_reg_addr); } else if(iic_reg->status.slv_trans_ful ==0){//从机发送fifo不满 while(iic_reg->status.slv_trans_ful ==0){ data = rand() & 0xFF;//从机发送随机数据 iic_reg->slavedata.slave_data = data;//iic_slave_data_Tx_buffer[iic_slave_data_Tx_cnt++]; co_printf("send %d.\r\n", data); } }
}