This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

am335x pru Soft-UART 硬件设备初始化问题



hi,我最近在弄有关pru虚拟串口的东西,按照这上面processors.wiki.ti.com/.../Soft-UART_Implementation_on_AM335X_PRU_-_Software_Users_Guide  我把驱动移植到了我的内核里面,但现在对硬件设备管脚等的一些初始化不知怎么搞,我的设备接线如下图:

最左边是MCASP0_AXR0,MCASP0_AXR2(图左边没截全)。。。我在board-am335xevm.c里应该怎样初始化呢?

还有,drivers/serial/am335x_pru_suart/am335x_suart_board.h这个文件我需要修改为我对应的gpio管脚么?

望解答,谢谢。

  • 你给的链接中,不是已经告诉了在其他的文件中需要改什么东西了吗?因为是使用的mcasp模块,board-am335xevm.c中应该是需要初始化mcasp对应的管脚信息的。

  • 那网页哪里没有讲到board-am335xevm.c里面该如何配置吧,还有我加载完驱动模块后,提示如下:

    /lib/modules # insmod suart_emu.ko

    [   26.507110] am33xx_pruss_uart am33xx_pruss_uart.1: no clock available: mcasp0_ick

    不知这是什么原因呢?

  • 加载内核后卡在了ti_am335x_pru_suart.c这里:

    #ifdef CONFIG_AM33XX_SUART_MCASP0    

     clk_mcasp0_ick = clk_get(NULL, "mcasp0_ick");   

      if (IS_ERR(clk_mcasp0_ick)) {        

     dev_err(&pdev->dev, "no clock available: mcasp0_ick\n");  

           err = -ENODEV;         goto probe_exit_clk_mcasp0_1;     }

        soft_uart->clk_mcasp = clk_get(NULL, "mcasp0_fck");  

       if (IS_ERR(soft_uart->clk_mcasp)) {  

           dev_err(&pdev->dev, "no clock available: mcasp\n");

            err = PTR_ERR(soft_uart->clk_mcasp);

            soft_uart->clk_mcasp = NULL;

           //  goto probe_exit_clk_mcasp0_2;     }

        soft_uart->clk_freq_mcasp = clk_get_rate(clk_mcasp0_ick);  

       clk_enable(soft_uart->clk_mcasp);

     #endif

    #ifdef CONFIG_AM33XX_SUART_MCASP1    

     clk_mcasp1_ick = clk_get(NULL, "mcasp1_ick");    

     if (IS_ERR(clk_mcasp1_ick)) {        

     dev_err(&pdev->dev, "no clock available: mcasp1_ick\n");

             err = -ENODEV;

           //  goto probe_exit_clk_mcasp1_1;     }

        soft_uart->clk_mcasp1 = clk_get(NULL, "mcasp1_fck");

        if (IS_ERR(soft_uart->clk_mcasp1))

     {         dev_err(&pdev->dev, "no clock available: mcasp1\n");

     .....

    打印信息:

     # ismod suart_emu.ko

     [  631.034484] am33xx_pruss_uart am33xx_pruss_uart.1: no clock available: mcasp0_ick

     [  631.042846] am33xx_pruss_uart am33xx_pruss_uart.1: no clock available: mcasp

    [  631.050537] am33xx_pruss_uart am33xx_pruss_uart.1: no clock available: mcasp1

    搞了好多天了,望给点建议,谢谢。

     

  • 是在没办法,最后选用了那网页里面的内核,但移植后还是出错了:

    / # insmod suart_emu.ko

     [  143.640045] am33xx_pruss_uart am33xx_pruss_uart.1: fw size 3912. downloading..

    . [  143.647796] Configuring McASP0

     [  143.660064] ENABLING PRU0

     [  143.671783] ENABLING PRU1

    [  143.674560] PROGRAM ID PRU0

     [  143.677673] pru_set_ram_data_for, uart_num : 3 pru_num:0 mcasp_num:1 tx_ser:1 rx_ser:0

     [  143.686035] Unable to handle kernel NULL pointer dereference at virtual address 00000184

    [  143.694580] pgd = cfbd4000

    [  143.697418] [00000184] *pgd=8fab3831, *pte=00000000, *ppte=00000000

     [  143.704101] Internal error: Oops: 817 [#1]

     [  143.708404] Modules linked in: suart_emu(+)

     [  143.712829] CPU: 0    Not tainted  (3.2.0-g41117e1-dirty #7)

     [  143.718811] PC is at pru_set_ram_data_for+0x274/0x2a4 [suart_emu]

    [  143.725250] LR is at console_unlock+0x170/0x1f8 [  143.730010] pc : [<bf0002ec>]    lr : [<c003d4b4>]    psr: 60000013

    [  143.730010] sp : cf98dc58  ip : cf98db50  fp : cf98dcc4 [  143.742095] r10: 4803c204  r9 : bf003bd4  r8 : 00000000

     [  143.747589] r7 : 4803c280  r6 : 4803c180  r5 : d0a80000  r4 : bf003b7cSegmentation fault

    望解答,谢谢!

  • 串口设备节点终于出来了,但这里的ttyS0 、1、2、3分别对应的硬件引脚是哪个呢?如果要改,在哪里改呢?谢谢!

    / # insmod suart_emu.ko

    [   68.428436] am33xx_pruss_uart am33xx_pruss_uart.1: fw size 3912. downloading...

     [   68.436187] Configuring McASP0

     [   68.439453] Configuring McASP1

     [   68.451629] ENABLING PRU0

    [   68.463409] ENABLING PRU1

     [   68.466186] PROGRAM ID PRU0

     [   68.469146] pru_set_ram_data_for, uart_num : 3 pru_num:0 mcasp_num:1 tx_ser:1 rx_ser:0

     [   68.477478] PROGRAM ID PRU1

     [   68.480407] pru_set_ram_data_for, uart_num : 1 pru_num:1 mcasp_num:0 tx_ser:2 rx_ser:0

     [   68.488769] pru_set_ram_data_for, uart_num : 2 pru_num:1 mcasp_num:0 tx_ser:3 rx_ser:1

     [   68.497100] RUN PRU0 [   68.499420] RUN PRU1

     [   68.501739] am33xx_pruss_uart.1: ttySU0 at MMIO 0x4a310000 (irq = 24) is a suart_tty

    [   68.513885] am33xx_pruss_uart.1: ttySU1 at MMIO 0x4a310000 (irq = 25) is a suart_tty

     [   68.522827] am33xx_pruss_uart.1: ttySU2 at MMIO 0x4a310000 (irq = 20) is a suart_tty

     [   68.534210] am33xx_pruss_uart.1: ttySU3 at MMIO 0x4a310000 (irq = 21) is a suart_tty

     [   68.543029] am33xx_pruss_uart am33xx_pruss_uart.1: am33xx_pruss_uart device registered(pru_clk=192000000, asp_clk=100000000)

  • 已解决!在内核源码的clock33xx_data.c的static struct omap_clk am33xx_clks[] 结构体中加入下面语句:

    CLK(NULL,       "mcasp0_ick",           &mcasp0_ick,    CK_AM33XX),

     CLK(NULL,       "mcasp0_fck",           &mcasp0_fck,    CK_AM33XX),  

    CLK(NULL,       "mcasp1_ick",           &mcasp1_ick,    CK_AM33XX),  

    CLK(NULL,       "mcasp1_fck",           &mcasp1_fck,    CK_AM33XX),