Skip to content

移植uart_cannan驱动,尚未合并uart和uart_cannan #6

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: dev-canmv-plctv2-cleanup
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions bsp/k230/drivers/interdrv/pdma/drv_pdma.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ static pdma_reg_t *pdma_reg;

static size_t g_pdma_page_size[8];
static bool g_pdma_alloc_page[8];
static rt_uint64_t saddr_high[8];
/***************************************************************
* general cfg
***************************************************************/
Expand Down Expand Up @@ -185,8 +186,8 @@ static rt_uint32_t *pdma_llt_cal(usr_pdma_cfg_t pdma_cfg)

rt_hw_cpu_dcache_clean_invalidate_local((uint64_t*)llt_list, sizeof(pdma_llt_t)*list_num);

// return (rt_uint32_t *)llt_list;
return (void *)((char *)llt_list + PV_OFFSET);
return (rt_uint32_t *)llt_list;
// return (void *)((char *)llt_list + PV_OFFSET);
}

int k_pdma_config(usr_pdma_cfg_t pdma_cfg)
Expand All @@ -204,15 +205,18 @@ int k_pdma_config(usr_pdma_cfg_t pdma_cfg)

pdma_reg->pdma_ch_reg[ch].ch_cfg = pdma_cfg.pdma_ch_cfg;
pdma_reg->ch_peri_dev_sel[ch] = pdma_cfg.device;
pdma_reg->pdma_ch_reg[ch].ch_llt_saddr = (rt_uint32_t)(intptr_t)pdma_llt_cal(pdma_cfg);
rt_uint32_t *p = pdma_llt_cal(pdma_cfg);
pdma_reg->pdma_ch_reg[ch].ch_llt_saddr = (rt_uint32_t)(intptr_t)p;
saddr_high[ch] = ((rt_uint64_t)p)>>32;

return 0;
}

void k_pdma_llt_free(rt_uint8_t ch)
{
rt_uint32_t *llt_list;
llt_list = (rt_uint32_t *)(intptr_t)pdma_reg->pdma_ch_reg[ch].ch_llt_saddr;
// llt_list = (rt_uint32_t *)(intptr_t)pdma_reg->pdma_ch_reg[ch].ch_llt_saddr;
llt_list = (rt_uint32_t *)(pdma_reg->pdma_ch_reg[ch].ch_llt_saddr + (saddr_high[ch]<<32));
if (g_pdma_alloc_page[ch])
{
rt_pages_free(llt_list, g_pdma_page_size[ch]);
Expand Down
34 changes: 34 additions & 0 deletions bsp/k230/drivers/interdrv/uart_canaan/drv_uart.c
Original file line number Diff line number Diff line change
Expand Up @@ -281,11 +281,45 @@ static void kd_uart_init(volatile void *uart_base, int index)

static rt_err_t uart_open(rt_device_t dev, rt_uint16_t oflag)
{
rt_base_t level;

struct kd_uart_device *kd_uart_device = (struct kd_uart_device *)dev->user_data;
struct rt_serial_rx_fifo *kd_rx_fifo = kd_uart_device->kd_rx_fifo;

// if(0x00 == kd_uart_device->dev_open_ref_cnt) {
level = rt_hw_interrupt_disable();

kd_rx_fifo->get_index = 0;
kd_rx_fifo->put_index = 0;
kd_rx_fifo->is_full = RT_FALSE;

rt_hw_interrupt_enable(level);
// }

// kd_uart_device->dev_open_ref_cnt ++;

return RT_EOK;
}

rt_err_t uart_close(rt_device_t dev)
{
rt_base_t level;

struct kd_uart_device *kd_uart_device = (struct kd_uart_device *)dev->user_data;
struct rt_serial_rx_fifo *kd_rx_fifo = kd_uart_device->kd_rx_fifo;

// kd_uart_device->dev_open_ref_cnt --;

// if(0x00 == kd_uart_device->dev_open_ref_cnt) {
level = rt_hw_interrupt_disable();

kd_rx_fifo->get_index = 0;
kd_rx_fifo->put_index = 0;
kd_rx_fifo->is_full = RT_FALSE;

rt_hw_interrupt_enable(level);
// }

return RT_EOK;
}

Expand Down
Loading