Thread 中讨论的其他器件: EK-TM4C1294XL
您好,
我想知道、如何准备一个新的定制板(基于 TM4C1294NCPDT 的设计) 以用于网络/以太网示例。 我的意思是说、从 DHCP 获取 IP 等 它是否需要在软件方面进行任何更改/或更改示例示例、例如(TCP 回波示例、我之前已用于测试我的定制板、这里我找不到 EMAC_Init 函数的定义)、对于 Launchpad 而言不需要这些更改、但对于定制板而言是必需的
请在这方面提供任何帮助。
谢谢
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.
您好,
我想知道、如何准备一个新的定制板(基于 TM4C1294NCPDT 的设计) 以用于网络/以太网示例。 我的意思是说、从 DHCP 获取 IP 等 它是否需要在软件方面进行任何更改/或更改示例示例、例如(TCP 回波示例、我之前已用于测试我的定制板、这里我找不到 EMAC_Init 函数的定义)、对于 Launchpad 而言不需要这些更改、但对于定制板而言是必需的
请在这方面提供任何帮助。
谢谢
[引用 user="Techinspired"]在这里、我找不到 EMAC_Init 函数的定义)、这在 Launchpad 中不是必需的、但在定制板中是必需的
大家好、Techinspirred、
非常感谢其他线程的绿光。 :-)
您能解释一下您在哪里阅读或发现 了上述信息。 定制 PCB 不拉取 IP 地址有什么问题? 您能否发布 PCB RJ45插孔部分的原理图?
您好 BP101、
感谢您的回复!
[引用 user="BP101"]您能否解释您在哪里阅读或发现 了上述信息。
抱歉,我的错误...我想说我在 TCP 回显示例中找不到 EMAC_init()函数的定义。 我想检查该函数在 EMAC 配置端的作用。 我宣读了评论。" 此函数用于初始化 EMAC 驱动程序"。 因此、我检查了是否需要对 EMAC 配置的定制板进行任何更改。
[报价用户="BP101]]您能否发布 PCB RJ45插孔部分的原理图? [/报价]
e2e.ti.com/.../Gateway_2D00_0.9.1.sch.pdf
其次、我想问的是、对于任何定制板(基于 TM4C1294NCPDT 的设计)、需要在软件方面做什么更改/示例代码示例以使网络示例正常工作...即从 DHCP 获取 IP 地址等 我已在自定义板上对任意 MAC 地址(F5-DC-EA-90-10-F2)进行了编程。 除此之外、我还需要在软件/示例代码中进行哪些其他更改、对于 launchpad 而言、这些更改是不需要的、但对于定制板而言、需要进行这些更改(我对此不了解...因此询问)。
此致、
技术尖头
通过:TIVAWARE_ROOT/driverlib/emac.c
//
//
//! 初始化以太网 MAC 并设置与总线相关的 DMA 参数。
//!
//! \param ui32Base 是以太网控制器的基址。
//! \param ui32SysClk 是以赫兹为单位的当前系统时钟频率。
//! param ui32BusConfig 定义以太网 MAC
//!的总线操作模式 DMA 控制器。
//! \param ui32RxBurst 是以字为单位的最大接收突发大小。
//! \param ui32TxBurst 是以字为单位的最大传输突发大小。
//! \param ui32DescSkipSize 是要在
//之间跳过的32位字的数量! 两个未链接的 DMA 描述符。 范围0到31的值是有效的。
//!
//! 此函数设置以太网 MAC DMA
//!的总线相关参数 引擎。 必须在 EMAPPHYConfigSet()之后调用它,然后再次调用
//! 在对 EMAPPHYConfigSet()进行任何后续调用之后。
//!
//! ui32BusConfig 参数是各种字段的逻辑 OR。
//! 首先设置 DMA 通道优先级权:
//!
//! - b EMAC_BCONFIG_DMA_PRIO_权 重1
//! - b EMAC_BCONFIG_DMA_PRIO_权 重2
//! - b EMAC_BCONFIG_DMA_PRIO_权 重3
//! - b EMAC_BCONFIG_DMA_PRIO_权 重_4
//!
//! 第二个字段设置
//!时使用的接收和发送优先级 在 Rx 和 Tx DMA 之间仲裁。 优先级为 Rx:Tx、除非
//! 也指定了 EMAC_BCONFIG_TX_PRIORITY、在这种情况下、它们成为
//! TX:Rx。 如果
//! b 指定了 EMAC_BCONFIG_PRIORY_FIXED。
//!
//! - b EMAC_BCONFIG_PRIORY_1_1
//! - b EMAC_BCONFIG_PRIORY_2_1
//! - b EMAC_BCONFIG_PRIORY_3_1
//! - b EMAC_BCONFIG_PRIORY_4_1
//!
//! 还可以定义以下附加标志:
//!
//! - b EMAC_BCONFIG_TX_PRIORITY 表示发送 DMA 应为
//! 系统侧总线的所有仲裁中具有更高的优先级。 如果不是
//! 已定义、接收 DMA 具有更高的优先级。
//! - b EMAC_BCONFIG_ADDR_ALIGN 与
//协同工作! b EMAC_BCONFIG_FIXED_BURST、用于控制 AHB 突发的地址对齐。
//! 当两个标志都被指定时、所有突发都与起始地址//
! 最低有效位。 如果未指定 b EMAC_BCONFIG_FIXED_BURST、
//! 第一个突发未对齐、但后续突发与
//! 地址。
//! -\b EMAC_BCONFIG_ALT_descriptors 表示 DMA 引擎应该
//! 使用类型
//!中定义的替代描述符格式 tEMACDMADescriptor。 如果不存在,则使用基本描述符类型。
//! 如果使用 IEEE 1588-2008高级
//! 时间戳、VLAN 或 TCP/UDP/ICMP CRC 插入功能。 请注意
、//! 为清楚起见、emac.h 不包含基本
//!的类型定义 描述符类型。 有关基本
//!的信息、请参阅器件数据表! 描述符结构。
//! - b EMAC_BCONFIG_PRIORY_FIXED 表示一个固定优先级方案
//! 在发送和接收 DMA //
!之间进行仲裁时应使用 用于系统侧总线访问。 在这种情况下、接收通道始终具有
//! 优先级、除非设置了 b EMAC_BCONFIG_TX_PRIORITY、在这种情况下为
//! 传输通道具有优先级。 如果未
//! 指定后、加权循环仲裁方案将与
//! 使用\b EMAC_BCONFIG_PRIORY_1_1定义加权、
//! b EMAC_BCONFIG_PRIOR_2_1、\b EMAC_BCONFIG_PRIORY_3_1或
//! b EMAC_BCONFIG_PRIORY_4_1和\b EMAC_BCONFIG_TX_PRIORITY。
//! - b EMAC_BCONFIG_FIXED_BURST 表示固定突发传输应该
//! 应用。
//! - b EMAC_BCONFIG_Mixed_burst 表示 DMA 引擎应该使用
//! 混合突发类型、具体取决于要传输的数据长度
//! 电压。
//!
//! ui32RxBurst 和 ui32TxBurst 参数指示最大
值//! 相关 DMA 应在单
个中传输的字数//! 事务。 有效值为1、2、4、8、16和32。 任何其他值
//! 导致未定义的行为。
//!
//! 描述符列表为
//时使用\e ui32DescSkipSize 参数! 使用环模式(其中描述符在内存中是连续的、最后
一个//! 用\b end_for_ring 标志标记的描述符)而不是链接模式
//! (其中每个描述符包含一个指向下一个描述符
的字段//! 列表中)。 在环形模式下、硬件使用\ui32DescSkipSize 来
//! 在硬件结束后跳过任何应用程序定义的字段-
//! 定义的描述符字段。 参数值指示
//!的数量 要在硬件定义
的最后一个字段之后跳过的32位字//! 以到达下一个描述符的第一个字段。 使用
//! tEMACDMADDescriptor 或\b tEMACAltDMADDescriptor //
!的数组 为此驱动程序定义的类型,必须将\ui32DescSkipSize 设置为1才能跳过
//! 将\e pvNext 指针添加到每个结构的末尾。
//! 应用程序可以修改这些结构定义以包括它们自己
的//! 应用特定数据、并在
//! 所需的。
//!
//! \无返回。
////
*****************
void
EMACInit (uint32_t ui32Base、uint32_t ui32SysClk、uint32_t ui32BusConfig、
uint32_t ui32RxBurst、uint32_t ui32TxBurst、uint32_t ui32DescSkipSize)
{
uint32_t ui32Val、ui32Div;
//
//参数完整性检查。
//
assert (ui32DescSkipSize < 32);
断言(ui32TxBurst <(32 * 8));
断言(ui32RxBurst <(32 * 8));
//
//在继续操作之前,确保 DMA 软件复位已清除。
//
while (HWREG (EMAC0_BASE + EMAC_O_DMABUSMOD)和 EMAC_DMABUSMOD_SWR)
{
}
//
//设置公共标志。 请注意、该驱动程序假定我们始终使用
// 8个字描述符,因此我们需要在此处的 EMAC_DMABUSMOD_ATDS 中执行或操作。
//
ui32Val =(ui32BusConfig |(ui32DescSkipSize << EMAC_DMABUSMOD_DSL_S)|
EMAC_DMABUSMOD_ATDS);
//
//我们是否需要使用8X 突发长度乘法器?
//
if ((ui32TxBurst > 32)||(ui32RxBurst > 32))
{
//
//将两个突发长度除以8并设置8X 突发长度
//乘法器。
//
ui32Val |= EMAC_DMABUSMOD_8XPBL;
ui32TxBurst >=3;
ui32RxBurst >=3;
//
//完整性检查-两个突发长度都不应变为零。 如果
//确实如此,这表示传递的值无效。
//
断言(ui32RxBurst);
断言(ui32TxBurst);
}
//
//接收和发送突发长度是否相同?
//
if (ui32RxBurst = ui32TxBurst)
{
//
//是-设置为使用单次突发长度。
//
ui32Val |=(ui32TxBurst << EMAC_DMABUSMOD_PBL_S);
}
其他
{
//
//否-我们需要为每个使用单独的突发长度。
//
ui32Val |=(EMAC_DMABUSMOD_USP |
(ui32TxBurst << EMAC_DMABUSMOD_PBL_S)|
(ui32RxBurst << EMAC_DMABUSMOD_RPBL_S);
}
//
//最后,写入总线模式寄存器。
//
HWREG (ui32Base + EMAC_O_DMABUSMOD)= ui32Val;
//
//根据最快的系统时钟默认 MII CSR 时钟分频器。
//
ui32Div = g_pi16MIIClockDiv[NUM_CLOCK 除数- 1].ui32除数;
//
//根据当前系统时钟找到要使用的 MII CSR 时钟分频器。
//
for (ui32Val = 0;ui32Val < NUM_CLOCK_DISARINS;ui32V++)
{
if (ui32SysClk <= g_pi16MIIClockDiv[ui32Val].ui32SysClockMax)
{
ui32Div = g_pi16MIIClockDiv[ui32Val].ui32Divisor;
中断;
}
}
//
//设置 MII CSR 时钟速度。
//
HWREG (ui32Base + EMAC_O_MIIADDR)=((HWREG (ui32Base + EMAC_O_MIIADDR)和
~EMAC_MIIADDR_CR_M)| ui32Div);
//
//禁用所有 MMC 中断、因为这些中断在复位时默认启用。
//
HWREG (ui32Base + EMAC_O_MMCRXIM)= 0xFFFFFFFF;
HWREG (ui32Base + EMAC_O_MMCTXIM)= 0xFFFFFFFF;
}
CB_1的明智之词(也经受住时间的考验!) 在这里绝对有价值;加载和连接整个 Tivaware 库的学习体验将向您传授您需要了解的大部分知识。 养成将您的研究分解为小型、易管理、可测试零件的习惯。
首先关注小位。 它们将叠加在美丽的图片中。 话虽如此、您是否曾尝试先获取开发板示例... 在担心旧的"充满危险、因为这里有龙"定制板开发之路之前? 必须找到一个很好的平衡;根据硬件(定制板)设计人员的需要进行更改。 设计。
在不了解您学习的最佳方式的情况下、我想提出一个一般性建议-获取定制电路板原理图的打印输出、并在 ETH 部分标记每个端口和引脚的轨迹。 需要考虑的面包屑。
分解、"保持简单、愚蠢"、然后冒险。 让我们大家知道您可能还需要什么。
您好 BP101。
[引用 user="BP101"]您能否发布 PCB RJ45插孔部分的原理图? [/报价]
请查找随附的以太网定制板原理图。 请告诉我在这里还缺少什么?
e2e.ti.com/.../5773.Gateway_2D00_0.9.1.sch.pdf
谢谢、此致、
技术尖头
[引用 user="Techinspired"]我找不到 EMAC_init ()的定义
这可能不是您想要的、但它位于您的 TivaWare 安装目录/packages/ti/drivers/EMAC.c 中
void EMAC_init (void) { /* *只允许首次初始化执行任何操作。 *接下来的是 nops。 * if (EMAC_COUNT >= 0){ 返回; } /*调用每个驱动程序的初始化函数*/ 对于(EMAC_COUNT = 0;EMAC_CONFIG[EMAC_COUNT].fxnTablePtr!= NULL; EMAC_COUNT++){ emac_config[emac_count].fxnTablePtr->emacInit(EMac_count); } 返回; }
函数指针指向不进行任何硬件配置的 EMACSnow_init()。
侧面问题、此函数是否尝试显示 EMAC Snow (burrr!) 还是 Emacs 现在(vim > emacs)?