Skip to content

Commit

Permalink
update cdnet, minimize critical sections
Browse files Browse the repository at this point in the history
  • Loading branch information
dukelec committed Jan 17, 2025
1 parent f9078f7 commit 00f8755
Show file tree
Hide file tree
Showing 5 changed files with 15 additions and 17 deletions.
2 changes: 1 addition & 1 deletion mdrv_bl/cdnet
2 changes: 1 addition & 1 deletion mdrv_fw/cdnet
2 changes: 1 addition & 1 deletion mdrv_fw/usr/app_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ static void device_init(void)
list_put(&packet_free_head, &packet_alloc[i].node);

spi_wr_init(&r_spi);
cdctl_dev_init(&r_dev, &frame_free_head, &csa.bus_cfg, &r_spi, NULL, &r_int);
cdctl_dev_init(&r_dev, &frame_free_head, &csa.bus_cfg, &r_spi, NULL, &r_int, EXTI9_5_IRQn);

// 12MHz / (0 + 2) * (48 + 2) / 2^1 = 150MHz
d_info("pll_n: %02x\n", cdctl_reg_r(&r_dev, REG_PLL_N));
Expand Down
3 changes: 1 addition & 2 deletions mdrv_fw/usr/app_motor.c
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,8 @@ uint8_t motor_w_hook_after(uint16_t sub_offset, uint8_t len, uint8_t *dat)

if (csa.state == ST_POS_TC) {
local_irq_save(flags);
if (csa.cal_pos != csa.tc_pos) {
if (csa.cal_pos != csa.tc_pos)
csa.tc_state = 1; // restart t_curve
}
local_irq_restore(flags);
}
return 0;
Expand Down
23 changes: 11 additions & 12 deletions mdrv_fw/usr/common_services.c
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,6 @@ static uint8_t csa_hook_exec(bool after, uint16_t offset, uint8_t len, uint8_t *
// csa manipulation
static void p5_service_routine(void)
{
uint32_t flags;
uint8_t ret_val = 0;
// read: 0x00, offset_16, len_8 | return [0x80, data]
// read_dft: 0x01, offset_16, len_8 | return [0x80, data]
Expand All @@ -195,9 +194,10 @@ static void p5_service_routine(void)

ret_val = csa_hook_exec(false, offset, len, NULL);
if (!ret_val) {
local_irq_save(flags); // TODO: avoid delay encoder spi read
// not use local_irq_save, avoid delay encoder spi read
NVIC_DisableIRQ(ADC1_2_IRQn);
memcpy(pkt->dat + 1, ((void *) &csa) + offset, len);
local_irq_restore(flags);
NVIC_EnableIRQ(ADC1_2_IRQn);
ret_val = csa_hook_exec(true, offset, len, NULL);
}

Expand Down Expand Up @@ -227,9 +227,9 @@ static void p5_service_routine(void)
//printf("csa @ %p, %p <- %p, len %d, dat[0]: %x\n",
// &csa, ((void *) &csa) + start, src_dat + (start - offset), end - start,
// *(src_dat + (start - offset)));
local_irq_save(flags);
NVIC_DisableIRQ(ADC1_2_IRQn);
memcpy(((void *) &csa) + start, src_dat + (start - offset), end - start);
local_irq_restore(flags);
NVIC_EnableIRQ(ADC1_2_IRQn);
}
ret_val = csa_hook_exec(true, offset, len, src_dat);
}
Expand Down Expand Up @@ -259,7 +259,6 @@ static void p5_service_routine(void)
// qxchg
static void p6_service_routine(void)
{
uint32_t flags;
uint8_t ret_val = 0;
cdn_pkt_t *pkt = cdn_sock_recvfrom(&sock6);
if (!pkt)
Expand Down Expand Up @@ -290,9 +289,9 @@ static void p6_service_routine(void)

ret_val = csa_hook_exec(false, regr->offset, lim_size, src_dat);
if (!ret_val) {
local_irq_save(flags);
NVIC_DisableIRQ(ADC1_2_IRQn);
memcpy(((void *) &csa) + regr->offset, src_dat, lim_size);
local_irq_restore(flags);
NVIC_EnableIRQ(ADC1_2_IRQn);
ret_val = csa_hook_exec(true, regr->offset, lim_size, src_dat);
}

Expand All @@ -305,9 +304,9 @@ static void p6_service_routine(void)
break;
ret_val = csa_hook_exec(false, regr->offset, regr->size, NULL);
if (!ret_val) {
local_irq_save(flags);
NVIC_DisableIRQ(ADC1_2_IRQn);
memcpy(dst_dat, ((void *) &csa) + regr->offset, regr->size);
local_irq_restore(flags);
NVIC_EnableIRQ(ADC1_2_IRQn);
ret_val = csa_hook_exec(true, regr->offset, regr->size, NULL);
}
dst_dat += regr->size;
Expand All @@ -326,9 +325,9 @@ static void p6_service_routine(void)
break;
ret_val = csa_hook_exec(false, regr->offset, regr->size, NULL);
if (!ret_val) {
local_irq_save(flags);
NVIC_DisableIRQ(ADC1_2_IRQn);
memcpy(dst_dat, ((void *) &csa) + regr->offset, regr->size);
local_irq_restore(flags);
NVIC_EnableIRQ(ADC1_2_IRQn);
ret_val = csa_hook_exec(true, regr->offset, regr->size, NULL);
}
dst_dat += regr->size;
Expand Down

0 comments on commit 00f8755

Please sign in to comment.