<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Welcome to Hang&#039;s Website!</title>
	<atom:link href="https://hangpersonal.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://hangpersonal.com</link>
	<description>Embedded Systems</description>
	<lastBuildDate>Sun, 29 Mar 2026 07:15:31 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://hangpersonal.com/wp-content/uploads/2024/10/cropped-HC-32x32.jpg</url>
	<title>Welcome to Hang&#039;s Website!</title>
	<link>https://hangpersonal.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">252449636</site>	<item>
		<title>STM32 FreeRTOS: FreeRTOS Scheduler</title>
		<link>https://hangpersonal.com/2026/02/25/stm32-freertos-scheduler/</link>
		
		<dc:creator><![CDATA[hangcui1201]]></dc:creator>
		<pubDate>Thu, 26 Feb 2026 02:46:40 +0000</pubDate>
				<category><![CDATA[Embedded System]]></category>
		<guid isPermaLink="false">https://hangpersonal.com/?p=5199</guid>

					<description><![CDATA[Work in Process STM32 Microcontroller and FreeRTOS Development The scheduling algorithm is the software routine that decides which ready state task to transition into the running state. Round Robin: this scheduler will ensure tasks that share priority are selected to enter the running state in turn. The Round Robin scheduling algorithm in FreeRTOS does not...]]></description>
										<content:encoded><![CDATA[
<span style="font-family: 'Inter', sans-serif; font-size: 22px; color: red;">
Work in Process
</span>
<br><br>

<a href="https://hangpersonal.com/embedded-system/stm32-mcu/freertos-tutorials/" 
style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
STM32 Microcontroller and FreeRTOS Development
</a>

<br><br>



<div class="article-text" style="margin-top:30px; margin-bottom:50px;">

<p>
The <b>scheduling algorithm</b> is the software routine that decides which ready state task to transition into the running state.
</p>

<p>
<b>Round Robin</b>: this scheduler will ensure tasks that share priority are selected to enter the running state in turn. The Round Robin scheduling algorithm in FreeRTOS does not guarantee time is shared equally between tasks of equal priority, only that ready state tasks of equal priority will enter the running state in turn.
</p>

<p>
<b>Fixed priority</b>: this scheduler does not change the priority assigned to the tasks being scheduled but also does not prevent the tasked from changing their own priority or that of other tasks.
</p>

<p>
<b>Pre-emptive</b>: this scheduler will immediately preempt the running state task if a task that has priority higher than the running state task enters the ready state. Being pre-empted means being involuntarily moved out of the running state and into the ready state to allow a different task to enter the running state.
</p>

<p>
<b>Time slicing</b>: this scheduler shares processing time between tasks of equal priority, even when the task does not explicitly yield or enter the blocked state. Scheduling algorithms described as using time slicing will select a new task to enter the running state at the end of each time slice if there are other ready state tasks that have the same priority as running task.
</p>

</div>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * 1rem);line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>// FreeRTOSConfig.h

// Preemptive priority scheduler
// No automatic round-robin for equal priorities
// Deterministic execution until voluntary block/yield
#define configUSE_PREEMPTION                      1 
#define configUSE_TIME_SLICING                    0

// Priority-based preemptive scheduling
// Round-robin between equal priorities
#define configUSE_PREEMPTION                      1 
#define configUSE_TIME_SLICING                    1 </textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955">// FreeRTOSConfig.h</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955">// Preemptive priority scheduler</span></span>
<span class="line"><span style="color: #6A9955">// No automatic round-robin for equal priorities</span></span>
<span class="line"><span style="color: #6A9955">// Deterministic execution until voluntary block/yield</span></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configUSE_PREEMPTION                      </span><span style="color: #B5CEA8">1</span><span style="color: #569CD6"> </span></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configUSE_TIME_SLICING                    </span><span style="color: #B5CEA8">0</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955">// Priority-based preemptive scheduling</span></span>
<span class="line"><span style="color: #6A9955">// Round-robin between equal priorities</span></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configUSE_PREEMPTION                      </span><span style="color: #B5CEA8">1</span><span style="color: #569CD6"> </span></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configUSE_TIME_SLICING                    </span><span style="color: #B5CEA8">1</span><span style="color: #569CD6"> </span></span></code></pre></div>



<br>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * 1rem);line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>// FreeRTOSConfig.h

#define configENABLE_FPU                          1
#define configENABLE_MPU                          0
#define configSUPPORT_STATIC_ALLOCATION           1
#define configSUPPORT_DYNAMIC_ALLOCATION          1
#define configUSE_PREEMPTION                      1
#define configUSE_TIME_SLICING                    1
#define configUSE_IDLE_HOOK                       0
#define configUSE_TICK_HOOK                       0
#define configUSE_QUEUE_SETS                      1
#define configUSE_TRACE_FACILITY                  1
#define configUSE_16_BIT_TICKS                    0
#define configUSE_MUTEXES                         1
#define configUSE_TASK_NOTIFICATIONS              1
#define configUSE_RECURSIVE_MUTEXES               1
#define configUSE_COUNTING_SEMAPHORES             1
#define configUSE_PORT_OPTIMISED_TASK_SELECTION   0
#define configCPU_CLOCK_HZ                        ( SystemCoreClock ) // system_stm32f4xx.c
#define configTICK_RATE_HZ                        ((TickType_t)1000)
#define configMAX_PRIORITIES                      ( 56 )
#define configMINIMAL_STACK_SIZE                  ((uint16_t)128)
#define configTOTAL_HEAP_SIZE                     ((size_t)15360)
#define configMAX_TASK_NAME_LEN                   ( 16 )
#define configQUEUE_REGISTRY_SIZE                 8</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955">// FreeRTOSConfig.h</span></span>
<span class="line"></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configENABLE_FPU                          </span><span style="color: #B5CEA8">1</span></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configENABLE_MPU                          </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configSUPPORT_STATIC_ALLOCATION           </span><span style="color: #B5CEA8">1</span></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configSUPPORT_DYNAMIC_ALLOCATION          </span><span style="color: #B5CEA8">1</span></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configUSE_PREEMPTION                      </span><span style="color: #B5CEA8">1</span></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configUSE_TIME_SLICING                    </span><span style="color: #B5CEA8">1</span></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configUSE_IDLE_HOOK                       </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configUSE_TICK_HOOK                       </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configUSE_QUEUE_SETS                      </span><span style="color: #B5CEA8">1</span></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configUSE_TRACE_FACILITY                  </span><span style="color: #B5CEA8">1</span></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configUSE_16_BIT_TICKS                    </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configUSE_MUTEXES                         </span><span style="color: #B5CEA8">1</span></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configUSE_TASK_NOTIFICATIONS              </span><span style="color: #B5CEA8">1</span></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configUSE_RECURSIVE_MUTEXES               </span><span style="color: #B5CEA8">1</span></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configUSE_COUNTING_SEMAPHORES             </span><span style="color: #B5CEA8">1</span></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configUSE_PORT_OPTIMISED_TASK_SELECTION   </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configCPU_CLOCK_HZ                        ( SystemCoreClock )</span><span style="color: #6A9955"> // system_stm32f4xx.c</span></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configTICK_RATE_HZ                        ((</span><span style="color: #4EC9B0">TickType_t</span><span style="color: #569CD6">)</span><span style="color: #B5CEA8">1000</span><span style="color: #569CD6">)</span></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configMAX_PRIORITIES                      ( </span><span style="color: #B5CEA8">56</span><span style="color: #569CD6"> )</span></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configMINIMAL_STACK_SIZE                  ((uint16_t)</span><span style="color: #B5CEA8">128</span><span style="color: #569CD6">)</span></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configTOTAL_HEAP_SIZE                     ((size_t)</span><span style="color: #B5CEA8">15360</span><span style="color: #569CD6">)</span></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configMAX_TASK_NAME_LEN                   ( </span><span style="color: #B5CEA8">16</span><span style="color: #569CD6"> )</span></span>
<span class="line"><span style="color: #C586C0">#define</span><span style="color: #569CD6"> configQUEUE_REGISTRY_SIZE                 </span><span style="color: #B5CEA8">8</span></span></code></pre></div>



<br><br>
<a href="#top" style="font-size:20px; color: blue;">Back to top of the page</a>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5199</post-id>	</item>
		<item>
		<title>STM32 FreeRTOS: Task Notifications</title>
		<link>https://hangpersonal.com/2026/02/19/stm32-freertos-task-notification/</link>
		
		<dc:creator><![CDATA[hangcui1201]]></dc:creator>
		<pubDate>Fri, 20 Feb 2026 04:49:27 +0000</pubDate>
				<category><![CDATA[Embedded System]]></category>
		<guid isPermaLink="false">https://hangpersonal.com/?p=5186</guid>

					<description><![CDATA[Work in Process STM32 Microcontroller and FreeRTOS Development Back to top of the page]]></description>
										<content:encoded><![CDATA[
<span style="font-family: 'Inter', sans-serif; font-size: 22px; color: red;">
Work in Process
</span>
<br><br>

<a href="https://hangpersonal.com/embedded-system/stm32-mcu/freertos-tutorials/" 
style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
STM32 Microcontroller and FreeRTOS Development
</a>
<br><br>



<br><br>
<a href="#top" style="font-size:20px; color: blue;">Back to top of the page</a>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5186</post-id>	</item>
		<item>
		<title>TI C2000: Analog Subsystem &#8211; Digital-to-Analog Converter (DAC)</title>
		<link>https://hangpersonal.com/2026/02/15/c2000-dac/</link>
		
		<dc:creator><![CDATA[hangcui1201]]></dc:creator>
		<pubDate>Sun, 15 Feb 2026 21:46:03 +0000</pubDate>
				<category><![CDATA[Embedded System]]></category>
		<guid isPermaLink="false">https://hangpersonal.com/?p=5148</guid>

					<description><![CDATA[Work in Process TI C2000 Real-Time Microcontroller: Control, Sensing, and Communication The F2837xD includes three buffered 12-bit DAC modules that can provide a programmable reference output voltage capable of driving an external load. Values written to the DAC can take effect immediately or be synchronized with ePWM events. Buffered DAC Block Diagram Two sets of...]]></description>
										<content:encoded><![CDATA[
<span style="font-family: 'Inter', sans-serif; font-size: 22px; color: red;">
Work in Process
</span>
<br><br>

<a href="https://hangpersonal.com/embedded-system/ti-mcu/c2000-tutorials/" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TI C2000 Real-Time Microcontroller: Control, Sensing, and Communication
</a>
<br><br>



<div class="article-text" style="margin-top:30px; margin-bottom:40px;">

<p>
The F2837xD includes three buffered 12-bit DAC modules that can provide a programmable reference output voltage capable of driving an external load. Values written to the DAC can take effect immediately or be synchronized with ePWM events.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img fetchpriority="high" decoding="async" width="1024" height="689" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_dac-1024x689.png" alt="" class="wp-image-6052" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_dac-1024x689.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_dac-300x202.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_dac-768x517.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_dac-850x572.png 850w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_dac.png 1361w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28_buffered_dac_block_diagram"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
Buffered DAC Block Diagram
</b>

<p>
Two sets of DACVAL registers are present in the buffered DAC module: DACVALA and DACVALS. DACVALA is a read-only register that actively controls the DAC value. DACVALS is a writable shadow register that loads into DACVALA either immediately or synchronized with the next PWMSYNC event. The ideal output of the internal DAC can be calculated as shown in the equation below.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_buffered_dac_block-1024x770.png" alt="" class="wp-image-6055" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_buffered_dac_block-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_buffered_dac_block-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_buffered_dac_block-768x577.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_buffered_dac_block-850x639.png 850w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_buffered_dac_block.png 1443w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
Reference
</b>

<p>
[1] <a href="https://www.ti.com/video/series/c2000-f2837xd-microcontroller-one-day-workshop-series.html" style="color: blue;">
TMS320F2837xD Microcontroller Workshop</a>
</p>

</div>




<br><br>
<a href="#top" style="font-size:20px; color: blue;">Back to top of the page</a>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5148</post-id>	</item>
		<item>
		<title>TI C2000: Interrupts</title>
		<link>https://hangpersonal.com/2026/02/08/c2000-interrupt/</link>
		
		<dc:creator><![CDATA[hangcui1201]]></dc:creator>
		<pubDate>Sun, 08 Feb 2026 08:02:17 +0000</pubDate>
				<category><![CDATA[Embedded System]]></category>
		<guid isPermaLink="false">https://hangpersonal.com/?p=4751</guid>

					<description><![CDATA[STM32 Microcontroller and FreeRTOS Development TMS320F28x7x Interrupt Sources TMS320F28x7x Interrupt Processing TMS320F28x7x IFR, IER, INTM TMS320F28x7x Peripheral Interrupt Expansion (PIE) TMS320F28x7x PIE Block Initialization TMS320F28x7x Interrupt Signal Flow TMS320F28x7D Dual-Core Interrupt Structure TMS320F28x7x Interrupt Response and Latency TMS320F28x7x Interrupt Sources The internal interrupt sources include the general purpose timers 0, 1, and 2, and all...]]></description>
										<content:encoded><![CDATA[
<a href="https://hangpersonal.com/embedded-system/stm32-mcu/freertos-tutorials/" 
style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
STM32 Microcontroller and FreeRTOS Development
</a>
<br><br>



<ul style="margin-top:30px; margin-bottom:30px;">

<li style="margin-bottom:16px;">
<a href="#c28x_interrupt_sources" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x Interrupt Sources
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_interrupt_processing" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x Interrupt Processing
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_ifr_ier_intm" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x IFR, IER, INTM
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_pie" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x Peripheral Interrupt Expansion (PIE)
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_pie_init" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x PIE Block Initialization
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_interrupt_signal_flow" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x Interrupt Signal Flow
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_dual_core_interrupt" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7D Dual-Core Interrupt Structure
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_interrupt_latency" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x Interrupt Response and Latency
</a>
</li> 

</ul>



<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_interrupt_sources"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x Interrupt Sources
</b>

<p>
The internal interrupt sources include the general purpose timers 0, 1, and 2, and all of the peripherals on the device. External interrupt sources include the three external interrupt lines, the trip zones, and the external reset pin. The core has 14 interrupt lines. The Peripheral Interrupt Expansion block, known as the PIE block, is connected to the core interrupt lines 1 through 12 and is used to expand the core interrupt capability, allowing up to 192 possible interrupt sources. 
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" width="963" height="724" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_interrupt_resource.png" alt="" class="wp-image-4809" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_interrupt_resource.png 963w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_interrupt_resource-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_interrupt_resource-768x577.png 768w" sizes="(max-width: 963px) 100vw, 963px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_interrupt_processing"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x Interrupt Processing
</b>

<p>
By using a series of flag and enable registers, the CPU can be configured to service one interrupt while others remain pending, or perhaps disabled when servicing certain critical tasks. When an interrupt signal occurs on a core line, the interrupt flag register (<b>IFR</b>) for that core line is set. If the appropriate interrupt enable register (<b>IER</b>) is enabled for that core line, and the interrupt global mask (<b>INTM</b>) is enabled, the interrupt signal will propagate to the core. 
</p>

<p>
Once the interrupt service routine (<b>ISR</b>) starts processing the interrupt, the <b>INTM</b> bit is disabled to prevent nested interrupts. The <b>IFR</b> is then cleared and ready for the next interrupt signal. When the interrupt servicing is completed, the <b>INTM</b> bit is automatically enabled, allowing the next interrupt to be serviced. Notice that when the <b>INTM</b> bit is <b>0</b>, the switch is closed and enabled. When the bit is <b>1</b>, the switch is open and disabled. The <b>IER</b> is managed by ORing and ANDing mask values. The <b>INTM</b> bit in the status register is managed by using in-line assembly instructions.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="963" height="724" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_interrupt_processing.png" alt="" class="wp-image-4818" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_interrupt_processing.png 963w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_interrupt_processing-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_interrupt_processing-768x577.png 768w" sizes="auto, (max-width: 963px) 100vw, 963px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:20px;">

<b id="c28x_ifr_ier_intm"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x IFR, IER, INTM
</b>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="963" height="724" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_ifr.png" alt="" class="wp-image-4823" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_ifr.png 963w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_ifr-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_ifr-768x577.png 768w" sizes="auto, (max-width: 963px) 100vw, 963px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="963" height="725" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_ier.png" alt="" class="wp-image-4824" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_ier.png 963w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_ier-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_ier-768x578.png 768w" sizes="auto, (max-width: 963px) 100vw, 963px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="963" height="724" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_intm.png" alt="" class="wp-image-4825" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_intm.png 963w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_intm-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_intm-768x577.png 768w" sizes="auto, (max-width: 963px) 100vw, 963px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_pie"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x Peripheral Interrupt Expansion (PIE)
</b>

<p>
The C28x CPU core has a total of fourteen interrupt lines, of which two interrupt lines are directly connected to CPU Timers 1 and 2 (on INT13 and INT14, respectively) and the remaining twelve interrupt lines (INT1 through INT12) are used to service the peripheral interrupts. A Peripheral Interrupt Expansion (PIE) module multiplexes up to sixteen peripheral interrupts into each of the twelve CPU interrupt lines, further expanding support for up to 192 peripheral interrupt signals. The PIE module also expands the interrupt vector table, allowing each unique interrupt signal to have its own interrupt service routine (ISR), permitting the CPU to support a large number of peripherals.
</p>

<p>
The PIE module has an individual flag and enable bit for each peripheral interrupt signal. Each of the sixteen peripheral interrupt signals that are multiplexed into a single CPU interrupt line is referred to as a <b>group</b>, so the PIE module consists of 12 groups. Each PIE group has a 16-bit flag register (<b>PIEIFRx</b>), a 16-bit enable register (<b>PIEIERx</b>), and a bit field in the PIE acknowledge register (<b>PIEACK</b>) which acts as a common interrupt mask for the entire group.
</p>

<p>
For a peripheral interrupt to propagate to the CPU, the appropriate <b>PIEIFR</b> must be set, the <b>PIEIER</b> enabled, the CPU IFR set, the IER enabled, and the INTM enabled. Note that some peripherals can have multiple events trigger the same interrupt signal, and the cause of the interrupt can be determined by reading the peripheral&#8217;s status register.
</p>

<p>
We have already discussed the interrupt process in the core. Now we need to look at the peripheral interrupt expansion block. This block is connected to the core interrupt lines 1 through 12. The PIE block consists of 12 groups. Within each group, there are sixteen interrupt sources. Each group has a PIE interrupt enable register and a PIE interrupt flag register. Note that interrupt lines 13, 14, and NMI bypass the PIE block.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="963" height="725" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie.png" alt="" class="wp-image-4832" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie.png 963w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie-768x578.png 768w" sizes="auto, (max-width: 963px) 100vw, 963px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<p>
The PIE assignment table maps each peripheral interrupt to the unique vector location for that interrupt service routine. Notice the interrupt numbers on the left represent the twelve core group interrupt lines and the interrupt numbers across the top represent the lower eight of the sixteen peripheral interrupts within the core group interrupt line. The next figure shows the upper eight of the sixteen peripheral interrupts within the core group interrupt line.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="772" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie_table_lower-1024x772.png" alt="" class="wp-image-4836" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie_table_lower-1024x772.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie_table_lower-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie_table_lower-768x579.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie_table_lower.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie_table_upper-1024x770.png" alt="" class="wp-image-4837" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie_table_upper-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie_table_upper-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie_table_upper-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie_table_upper.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<p>
Similar to the core interrupt process, the PIE module has an individual flag and enable bit for each peripheral interrupt signal. Each PIE group has a 16-bit flag register, a 16-bit enable register, and a bit field in the PIE acknowledge register which acts as a common interrupt mask for the entire group. The enable PIE bit in the PIECTRL register is used to activate the PIE module.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie_register-1024x771.png" alt="" class="wp-image-4840" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie_register-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie_register-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie_register-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie_register.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:40px;">
</div>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D5CED9;--cbp-line-number-width:calc(2 * 0.6 * 1rem);line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" style="color:#D5CED9;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>// Clear all interrupts and initialize PIE vector table:
// Disable CPU interrupts
DINT;

// Initialize the PIE control registers to their default state.
InitPieCtrl();

// Disable CPU interrupts and clear all CPU interrupt flags:
IER = 0x0000;
IFR = 0x0000;

// Initialize the PIE vector table with pointers to the shell Interrupt
// Service Routines (ISR).
InitPieVectTable();

// Interrupts that are used in this example are re-mapped to
// ISR functions found within this project
EALLOW;  
PieVectTable.SCIA_RX_INT = &amp;RXAINT_recv_ready;
PieVectTable.SCIA_TX_INT = &amp;TXAINT_data_sent;
EDIS;    

// Enable global Interrupts and higher priority real-time debug events
EINT;  // Enable Global interrupt INTM
ERTM;  // Enable Global realtime interrupt DBGM

// Initialize the SCIA ...
PieCtrlRegs.PIEIER9.bit.INTx1 = 1; // Enables SCI-A Receive (RX)
PieCtrlRegs.PIEIER9.bit.INTx2 = 1; // Enables SCI-A Transmit (TX)
IER |= (M_INT9);
PieCtrlRegs.PIEACK.all = (PIEACK_GROUP9);</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki andromeda" style="background-color: #23262E" tabindex="0"><code><span class="line"><span style="color: #A0A1A7CC">// Clear all interrupts and initialize PIE vector table:</span></span>
<span class="line"><span style="color: #A0A1A7CC">// Disable CPU interrupts</span></span>
<span class="line"><span style="color: #D5CED9">DINT;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #A0A1A7CC">// Initialize the PIE control registers to their default state.</span></span>
<span class="line"><span style="color: #FFE66D">InitPieCtrl</span><span style="color: #D5CED9">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #A0A1A7CC">// Disable CPU interrupts and clear all CPU interrupt flags:</span></span>
<span class="line"><span style="color: #D5CED9">IER </span><span style="color: #EE5D43">=</span><span style="color: #D5CED9"> </span><span style="color: #C74DED">0x</span><span style="color: #F39C12">0000</span><span style="color: #D5CED9">;</span></span>
<span class="line"><span style="color: #D5CED9">IFR </span><span style="color: #EE5D43">=</span><span style="color: #D5CED9"> </span><span style="color: #C74DED">0x</span><span style="color: #F39C12">0000</span><span style="color: #D5CED9">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #A0A1A7CC">// Initialize the PIE vector table with pointers to the shell Interrupt</span></span>
<span class="line"><span style="color: #A0A1A7CC">// Service Routines (ISR).</span></span>
<span class="line"><span style="color: #FFE66D">InitPieVectTable</span><span style="color: #D5CED9">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #A0A1A7CC">// Interrupts that are used in this example are re-mapped to</span></span>
<span class="line"><span style="color: #A0A1A7CC">// ISR functions found within this project</span></span>
<span class="line"><span style="color: #D5CED9">EALLOW;  </span></span>
<span class="line"><span style="color: #D5CED9">PieVectTable.SCIA_RX_INT </span><span style="color: #EE5D43">=</span><span style="color: #D5CED9"> </span><span style="color: #EE5D43">&amp;</span><span style="color: #D5CED9">RXAINT_recv_ready;</span></span>
<span class="line"><span style="color: #D5CED9">PieVectTable.SCIA_TX_INT </span><span style="color: #EE5D43">=</span><span style="color: #D5CED9"> </span><span style="color: #EE5D43">&amp;</span><span style="color: #D5CED9">TXAINT_data_sent;</span></span>
<span class="line"><span style="color: #D5CED9">EDIS;    </span></span>
<span class="line"></span>
<span class="line"><span style="color: #A0A1A7CC">// Enable global Interrupts and higher priority real-time debug events</span></span>
<span class="line"><span style="color: #D5CED9">EINT;</span><span style="color: #A0A1A7CC">  // Enable Global interrupt INTM</span></span>
<span class="line"><span style="color: #D5CED9">ERTM;</span><span style="color: #A0A1A7CC">  // Enable Global realtime interrupt DBGM</span></span>
<span class="line"></span>
<span class="line"><span style="color: #A0A1A7CC">// Initialize the SCIA ...</span></span>
<span class="line"><span style="color: #D5CED9">PieCtrlRegs.PIEIER9.bit.INTx1 </span><span style="color: #EE5D43">=</span><span style="color: #D5CED9"> </span><span style="color: #F39C12">1</span><span style="color: #D5CED9">;</span><span style="color: #A0A1A7CC"> // Enables SCI-A Receive (RX)</span></span>
<span class="line"><span style="color: #D5CED9">PieCtrlRegs.PIEIER9.bit.INTx2 </span><span style="color: #EE5D43">=</span><span style="color: #D5CED9"> </span><span style="color: #F39C12">1</span><span style="color: #D5CED9">;</span><span style="color: #A0A1A7CC"> // Enables SCI-A Transmit (TX)</span></span>
<span class="line"><span style="color: #D5CED9">IER </span><span style="color: #EE5D43">|=</span><span style="color: #D5CED9"> (M_INT9);</span></span>
<span class="line"><span style="color: #D5CED9">PieCtrlRegs.PIEACK.all </span><span style="color: #EE5D43">=</span><span style="color: #D5CED9"> (PIEACK_GROUP9);</span></span></code></pre></div>



<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_pie_init"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x PIE Block Initialization
</b>

<p>
The interrupt vector table, as mapped in the PIE interrupt assignment table, is located in the PieVect.c file. During processor initialization a function call to PieCtrl.c file is used to copy the interrupt vector table to the PIE RAM and then the PIE module is enabled by setting ENPIE to 1. When the CPU receives an interrupt, the vector address of the ISR is fetched from the PIE RAM, and the interrupt with the highest priority that is both flagged and enabled is executed. Priority is determined by the location within the interrupt vector table. The lowest numbered interrupt has the highest priority when multiple interrupts are pending.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie_block_init-1024x770.png" alt="" class="wp-image-4855" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie_block_init-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie_block_init-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie_block_init-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie_block_init.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<p>
In summary, the PIE initialization code flow is as follows. After the device is reset and execution of the boot code is completed, the selected boot option determines the code entry point. In this figure, two different entry points are shown. The one on the left is for memory block M0 RAM, and the one on the right is for flash.
</p>

<p>
In either case, the CodeStartBranch.asm file has a Long Branch instruction to the entry point of the runtime support library. After the runtime support library completes execution, main is called. In main, a function is called to initialize the interrupt process and enable the PIE module. When the CPU receives an interrupt, the vector address of the ISR is fetched from the PIE RAM, and the interrupt with the highest priority that is both flagged and enabled is executed. Priority is determined by the location within the interrupt vector table.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie_init_flow-1024x770.png" alt="" class="wp-image-4859" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie_init_flow-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie_init_flow-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie_init_flow-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_pie_init_flow.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_interrupt_signal_flow"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x Interrupt Signal Flow
</b>

<p>
In summary, the following steps occur during an interrupt process. First, a peripheral interrupt is generated and the PIE interrupt flag register is set. If the PIE interrupt enable register is enabled, then the core interrupt flag register will be set. Next, if the core interrupt enable register and global interrupt mask is enabled, the PIE vector table will redirect the code to the interrupt service routine.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_interrupt_signal_flow-1024x771.png" alt="" class="wp-image-4864" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_interrupt_signal_flow-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_interrupt_signal_flow-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_interrupt_signal_flow-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_interrupt_signal_flow.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_dual_core_interrupt"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7D Dual-Core Interrupt Structure
</b>

<p>
Each C28x CPU core in the F2837xD device has its own PIE module, and each PIE module is configured independently. Some interrupt signals are sourced from shared peripherals that canbe owned by either CPU, and these interrupt signals are sent to both CPU PIE modules regardless of which CPU owns the peripheral. Therefore, if enabled a peripheral owned by one CPU can cause an interrupt on the other CPU.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_dual_core_interrupt-1024x771.png" alt="" class="wp-image-4868" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_dual_core_interrupt-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_dual_core_interrupt-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_dual_core_interrupt-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_dual_core_interrupt.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_interrupt_latency"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x Interrupt Response and Latency
</b>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_interrupt_hardware_sequence-1024x771.png" alt="" class="wp-image-4872" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_interrupt_hardware_sequence-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_interrupt_hardware_sequence-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_interrupt_hardware_sequence-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_interrupt_hardware_sequence.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_interrupt_latency-1024x770.png" alt="" class="wp-image-4874" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_interrupt_latency-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_interrupt_latency-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_interrupt_latency-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_interrupt_latency.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
Reference
</b>

<p>
[1] <a href="https://www.ti.com/video/series/c2000-f2837xd-microcontroller-one-day-workshop-series.html" style="color: blue;">
TMS320F2837xD Microcontroller Workshop</a>
</p>

</div>



<br><br>
<a href="#top" style="font-size:20px; color: blue;">Back to top of the page</a>



<p></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4751</post-id>	</item>
		<item>
		<title>STM32 FreeRTOS: Task API Functions</title>
		<link>https://hangpersonal.com/2026/02/06/stm32-freertos-task/</link>
		
		<dc:creator><![CDATA[hangcui1201]]></dc:creator>
		<pubDate>Sat, 07 Feb 2026 06:05:29 +0000</pubDate>
				<category><![CDATA[Embedded System]]></category>
		<guid isPermaLink="false">https://hangpersonal.com/?p=4607</guid>

					<description><![CDATA[Work in Process STM32 Microcontroller and FreeRTOS Development Back to top of the page]]></description>
										<content:encoded><![CDATA[
<span style="font-family: 'Inter', sans-serif; font-size: 22px; color: red;">
Work in Process
</span>
<br><br>

<a href="https://hangpersonal.com/embedded-system/stm32-mcu/freertos-tutorials/" 
style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
STM32 Microcontroller and FreeRTOS Development
</a>
<br><br>



<br><br>
<a href="#top" style="font-size:20px; color: blue;">Back to top of the page</a>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4607</post-id>	</item>
		<item>
		<title>STM32 FreeRTOS: Introduction to FreeRTOS</title>
		<link>https://hangpersonal.com/2026/02/04/stm32-freertos-introduction/</link>
		
		<dc:creator><![CDATA[hangcui1201]]></dc:creator>
		<pubDate>Thu, 05 Feb 2026 06:56:58 +0000</pubDate>
				<category><![CDATA[Embedded System]]></category>
		<guid isPermaLink="false">https://hangpersonal.com/?p=4599</guid>

					<description><![CDATA[STM32 Microcontroller and FreeRTOS Development FreeRTOS is a lightweight, deterministic real-time operating system (RTOS) designed for microcontrollers and small embedded processors where timing, reliability, and resource efficiency are critical. Unlike general-purpose operating systems, FreeRTOS provides a minimal kernel focused on predictable task scheduling, fast interrupt response, and low memory footprint, making it well suited for...]]></description>
										<content:encoded><![CDATA[
<a href="https://hangpersonal.com/embedded-system/stm32-mcu/freertos-tutorials/" 
style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
STM32 Microcontroller and FreeRTOS Development
</a>
<br><br>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="383" src="https://hangpersonal.com/wp-content/uploads/2026/02/freertos_icon-1024x383.png" alt="" class="wp-image-5946" style="width:300px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/freertos_icon-1024x383.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/freertos_icon-300x112.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/freertos_icon-768x287.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/freertos_icon-850x318.png 850w, https://hangpersonal.com/wp-content/uploads/2026/02/freertos_icon.png 1528w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<div class="article-text" style="margin-top:30px; margin-bottom:40px;">

<p>
<b>FreeRTOS</b> is a lightweight, deterministic real-time operating system (RTOS) designed for microcontrollers and small embedded processors where timing, reliability, and resource efficiency are critical. Unlike general-purpose operating systems, FreeRTOS provides a minimal kernel focused on predictable task scheduling, fast interrupt response, and low memory footprint, making it well suited for motor control, robotics, automotive, and IoT devices. It enables developers to structure firmware as multiple concurrent tasks instead of a single super-loop, improving modularity and maintainability while still meeting strict real-time deadlines. The kernel offers essential synchronization and communication mechanisms such as queues, semaphores, mutexes, software timers, and event groups, allowing safe data exchange between tasks and interrupt service routines. Because it is portable across many architectures and integrates easily with vendor SDKs, FreeRTOS has become one of the most widely adopted foundations for modern embedded real-time software.
</p>

<p>
<b>Scheduling &#038; Execution Model</b>
<ul>
<li>Supports preemptive, cooperative, and time-slice scheduling
</li>
<li>Supports real-time tasks and co-routines
</li>
<li>Unlimited number of tasks
</li>
<li>Unlimited priority levels
</li>
</ul>
</p>

<p>
<b>Memory &#038; Footprint</b>
<ul>
<li>Very small kernel footprint (typically 4–9 KB RAM)
</li>
<li>Components can use static or dynamic memory allocation
</li>
<li>Written mainly in C language for portability
</li>
<li>Portable across 40+ CPU architectures
</li>
</ul>
</p>

<p>
<b>Power &#038; Efficiency</b>
<ul>
<li>Provides Tickless mode for low-power applications
</li>
<li>Efficient software timers
</li>
<li>Optimized for small microcontrollers
</li>
</ul>
</p>

<p>
<b>Inter-Task Communication &#038; Synchronization</b>
<ul>
<li>Task notifications
</li>
<li>Message queues
</li>
<li>Binary semaphores
</li>
<li>Counting semaphores
</li>
<li>Recursive mutexes
</li>
<li>Mutexes with priority inheritance
</li>
<li>Event groups (event flags)
</li>
</ul>
</p>

<p>
<b>Safety &#038; Reliability</b>
<ul>
<li>Stack overflow detection
</li>
<li>Strong execution tracing capability
</li>
<li>MPU support on Cortex-M (e.g., STM32F429, STM32F407)
</li>
<li>SafeRTOS derived version available for higher code integrity
</li>
</ul>
</p>

</div>



<div class="article-text" style="margin-top:50px; margin-bottom:30px;">

<b style="display:block;
   font-family: 'Inter', sans-serif; 
   font-size: 22px; 
   color: black; 
   margin-top:0px; 
   margin-bottom:20px;">
FreeRTOS Files
</b>

</div>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="716" src="https://hangpersonal.com/wp-content/uploads/2026/02/FreeRTOS_Files-1-1024x716.png" alt="" class="wp-image-6333" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/FreeRTOS_Files-1-1024x716.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/FreeRTOS_Files-1-300x210.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/FreeRTOS_Files-1-768x537.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/FreeRTOS_Files-1-1536x1074.png 1536w, https://hangpersonal.com/wp-content/uploads/2026/02/FreeRTOS_Files-1-850x594.png 850w, https://hangpersonal.com/wp-content/uploads/2026/02/FreeRTOS_Files-1.png 1890w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<div class="article-text" style="margin-top:50px; margin-bottom:30px;">

<b style="display:block;
   font-family: 'Inter', sans-serif; 
   font-size: 22px; 
   color: black; 
   margin-top:0px; 
   margin-bottom:20px;">
FreeRTOS General-Purpose Functional Files and Their Functions
</b>

</div>


            <div  class="spbtbl-wrapper spbtbl-blockmode" >
                                <table class="spbtbl-style spbtbl-color-blue" title="FreeRTOS General-Purpose Functional Files and Their Functions"  itemscope itemtype="http://schema.org/Table" >
                    <!-- Superb Tables Plugin -->
                    <thead>
                        <tr>
                            <th style="font-size: 18px !important;"  itemprop="name"  align="left">File</th><th style="font-size: 18px !important;"  itemprop="name"  align="left">Function</th>                        </tr>
                    </thead>
                    <tbody>
                        <tr>                                    <td style="font-size:18px !important;" itemprop="description" >croutine.h/.c</td>                                    <td style="font-size:18px !important;" itemprop="description" >Source files that implement co-routine functionality. Co-routines are mainly used for very small MCUs and are now rarely used</td>                            </tr>
                        <tr>                                    <td style="font-size:18px !important;" itemprop="description" >event_groups.h/.c</td>                                    <td style="font-size:18px !important;" itemprop="description" >Source files that implement event group functionality</td>                            </tr>
                        <tr>                                    <td style="font-size:18px !important;" itemprop="description" >list.h/.c</td>                                    <td style="font-size:18px !important;" itemprop="description" >Source files that implement linked list functionality. The FreeRTOS task scheduler uses linked lists</td>                            </tr>
                        <tr>                                    <td style="font-size:18px !important;" itemprop="description" >queue.h/.c</td>                                    <td style="font-size:18px !important;" itemprop="description" >Source files that implement queue functionality</td>                            </tr>
                        <tr>                                    <td style="font-size:18px !important;" itemprop="description" >semphr.</td>                                    <td style="font-size:18px !important;" itemprop="description" >Header file that implements semaphore functionality. Semaphores are based on queues, and the semaphore operation functions are macro-defined functions whose implementations ultimately call queue-handling functions</td>                            </tr>
                        <tr>                                    <td style="font-size:18px !important;" itemprop="description" >task.h/.c</td>                                    <td style="font-size:18px !important;" itemprop="description" >Source files that implement task management functionality</td>                            </tr>
                        <tr>                                    <td style="font-size:18px !important;" itemprop="description" >timers.h/.c</td>                                    <td style="font-size:18px !important;" itemprop="description" >Source files that implement software timer functionality</td>                            </tr>
                        <tr>                                    <td style="font-size:18px !important;" itemprop="description" >stream_buffer.h/.c</td>                                    <td style="font-size:18px !important;" itemprop="description" >Source files that implement stream buffer functionality. A stream buffer is an optimized inter-process/inter-task communication mechanism used to transfer continuous stream data between tasks, or between tasks and interrupt service routines. Stream buffer functionality was introduced in FreeRTOS Version 10</td>                            </tr>
                        <tr>                                    <td style="font-size:18px !important;" itemprop="description" >message_buffer.h</td>                                    <td style="font-size:18px !important;" itemprop="description" >In FreeRTOS Version 10, an innovative message buffer mechanism was introduced. Its functionality is encapsulated through carefully written macro functions, which integrate stream buffer operations to achieve efficient message buffering and management. This feature marked another important advance for FreeRTOS in the real-time operating system field, providing developers with more powerful and flexible message processing capabilities</td>                            </tr>
                        <tr>                                    <td style="font-size:18px !important;" itemprop="description" >mpu_prototypes.h/mpu_wrappers.h</td>                                    <td style="font-size:18px !important;" itemprop="description" >Header files for MPU functionality. The functions defined in these files are standard functions with the prefix MPU_ added. When an application uses MPU functionality, these functions are given priority execution by the FreeRTOS kernel. MPU functionality was introduced in FreeRTOS Version 10</td>                            </tr>
                                            </tbody>
                </table>
                            </div>




<div class="article-text" style="margin-top:20px; margin-bottom:30px;">

<b style="display:block;
   font-family: 'Inter', sans-serif; 
   font-size: 22px; 
   color: black; 
   margin-top:0px; 
   margin-bottom:20px;">
Common Macro Definitions in projdefs.h and Their Functions
</b>

</div>


            <div  class="spbtbl-wrapper spbtbl-blockmode" >
                                <table class="spbtbl-style spbtbl-color-purple" title="Common Macro Definitions in projdefs.h and Their Functions"  itemscope itemtype="http://schema.org/Table" >
                    <!-- Superb Tables Plugin -->
                    <thead>
                        <tr>
                            <th style="font-size: 18px !important;"  itemprop="name"  align="left">Macro Definition</th><th style="font-size: 18px !important;"  itemprop="name"  align="left">Value</th><th style="font-size: 18px !important;"  itemprop="name"  align="left">Function</th>                        </tr>
                    </thead>
                    <tbody>
                        <tr>                                    <td style="font-size:18px !important;" itemprop="description" >pdFALSE</td>                                    <td style="font-size:18px !important;" itemprop="description" >0</td>                                    <td style="font-size:18px !important;" itemprop="description" >Represents the logical value false</td>                            </tr>
                        <tr>                                    <td style="font-size:18px !important;" itemprop="description" >pdTRUE</td>                                    <td style="font-size:18px !important;" itemprop="description" >1</td>                                    <td style="font-size:18px !important;" itemprop="description" >Represents the logical value true</td>                            </tr>
                        <tr>                                    <td style="font-size:18px !important;" itemprop="description" >pdFAIL</td>                                    <td style="font-size:18px !important;" itemprop="description" >0</td>                                    <td style="font-size:18px !important;" itemprop="description" >Represents the logical value false</td>                            </tr>
                        <tr>                                    <td style="font-size:18px !important;" itemprop="description" >pdPASS</td>                                    <td style="font-size:18px !important;" itemprop="description" >1</td>                                    <td style="font-size:18px !important;" itemprop="description" >Represents the logical value true</td>                            </tr>
                        <tr>                                    <td style="font-size:18px !important;" itemprop="description" >pdMS_TO_TICKS(xTimeInMs)</td>                                    <td style="font-size:18px !important;" itemprop="description" >-</td>                                    <td style="font-size:18px !important;" itemprop="description" >A macro function that converts the number of milliseconds represented by xTimeInMs into tick counts</td>                            </tr>
                                            </tbody>
                </table>
                            </div>




<div class="article-text" style="margin-top:50px; margin-bottom:20px;">

<b style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
Reference
</b>

<p>
[1] <a href="https://www.freertos.org/" style="color: blue;">
FreeRTOS</a>
<br>

[2] <a href="https://www.freertos.org/Documentation/03-Libraries/01-Library-overview/03-LTS-libraries/01-LTS-libraries" style="color: blue;">
FreeRTOS LTS Libraries</a>
<br>

[3] <a href="https://www.freertos.org/Documentation/01-FreeRTOS-quick-start/01-Beginners-guide/00-Overview" style="color: blue;">
Beginner&#8217;s guides to FreeRTOS</a>
<br>

[4] <a href="https://www.freertos.org/Documentation/02-Kernel/07-Books-and-manual/01-RTOS_book" style="color: blue;">
FreeRTOS Documentation</a>
<br>

[5] <a href="https://www.freertos.org/Documentation/02-Kernel/07-Books-and-manual/01-Code/01-Zip-files" style="color: blue;">
FreeRTOS Book Examples</a>
<br>

[6] <a href="https://www.freertos.org/Documentation/02-Kernel/02-Kernel-features/00-Developer-docs" style="color: blue;">
FreeRTOS Kernel Developer Docs</a>
</p>

</div>



<br><br>
<a href="#top" style="font-size:20px; color: blue;">Back to top of the page</a>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4599</post-id>	</item>
		<item>
		<title>TI C2000: Analog Subsystem &#8211; Analog-to-Digital Converter (ADC)</title>
		<link>https://hangpersonal.com/2026/02/04/c2000-adc/</link>
		
		<dc:creator><![CDATA[hangcui1201]]></dc:creator>
		<pubDate>Thu, 05 Feb 2026 05:31:48 +0000</pubDate>
				<category><![CDATA[Embedded System]]></category>
		<guid isPermaLink="false">https://hangpersonal.com/?p=4590</guid>

					<description><![CDATA[TI C2000 Real-Time Microcontroller: Control, Sensing, and Communication TMS320F28x7x ADC Subsystem TMS320F28x7x ADC Module Block Diagram TMS320F28x7x ADC SOCx Functional Diagram TMS320F28x7x ADC Triggering TMS320F28x7x ADC Ping-Pong Triggering TMS320F28x7x ADC Conversion Priority Example – Round Robin Priority Example – High Priority Example – Round Robin Burst Mode with High Priority TMS320F28x7x ADC Post Processing Block...]]></description>
										<content:encoded><![CDATA[
<a href="https://hangpersonal.com/embedded-system/ti-mcu/c2000-tutorials/" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TI C2000 Real-Time Microcontroller: Control, Sensing, and Communication
</a>
<br><br>



<ul style="margin-top:30px; margin-bottom:30px;">

<li style="margin-bottom:16px;">
<a href="#c28x_adc_subsystem" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x ADC Subsystem
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_adc_module_block" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x ADC Module Block Diagram
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_adc_socx_functional_diagram" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x ADC SOCx Functional Diagram
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_adc_trigger" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x ADC Triggering
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_adc_ping_pong_trigger" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x ADC Ping-Pong Triggering
</a>
</li> 

<li style="margin-bottom:16px;">
  <a href="#c28x_adc_conversion_priority"
     style="font-family:'Inter', sans-serif; font-size:22px; color:blue;">
     TMS320F28x7x ADC Conversion Priority
  </a>

  <ul style="line-height:2.0; margin-top:8px; padding-left:20px; font-family:'Inter', sans-serif; font-size:22px;">
    <li>Example – Round Robin Priority</li>
    <li>Example – High Priority</li>
    <li>Example – Round Robin Burst Mode with High Priority</li>
  </ul>
</li>

<li style="margin-bottom:16px;">
<a href="#c28x_adc_post_processing_block" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x ADC Post Processing Block
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_adc_clocking_flow" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x ADC Clocking Flow
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_adc_converter_registers" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x ADC Converter Registers
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_adc_control_registers" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x ADC Control Registers
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_adc_conversion_result_registers" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x ADC Conversion Result Registers
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_adc_signed_input_voltages" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x ADC Signed Input Voltages
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_adc_calibration_reference" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x ADC Calibration and Reference
</a>
</li> 

</ul>



<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_adc_subsystem"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x ADC Subsystem
</b>

<p>
The F2837xD includes four independent high-performance ADC modules which can be accessed
by both CPU subsystems, allowing the device to efficiently manage multiple analog signals for enhanced overall system throughput. Each ADC module has a single sample-and-hold (S/H) circuit and using multiple ADC modules enables simultaneous sampling or sequential sampling. The ADC module is implemented using a successive approximation (SAR) type ADC with a configurable resolution of either 16-bits or 12-bits. 
</p>

<p>
For 16-bit resolution, the ADC performs differential signal conversions with a performance of 1.1 MSPS, yielding 4.4 MSPS for the device. In differential signal mode, a pair of pins (positive input ADCINxP and negative input ADCINxN) is sampled and the input applied to the converter is the difference between the two pins (ADCINxP – ADCINxN). A benefit of differential signaling mode is the ability to cancel noise that may be introduced common to both inputs. For 12-bit resolution, the ADC performs single-ended signal conversions with a performance of 3.5 MSPS, yielding 14 MSPS for the device. In single-ended mode, a single pin (ADCINx) is sampled and applied to the input of the converter.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_subsystem-1024x770.png" alt="" class="wp-image-5007" style="object-fit:cover" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_subsystem-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_subsystem-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_subsystem-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_subsystem.png 1457w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_adc_module_block"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x ADC Module Block Diagram
</b>

<p>
The ADC triggering and conversion sequencing is managed by a series of start-of-conversion (SOCx) configuration registers. Each SOCx register configures a single channel conversion, where the SOCx register specifies the trigger source that starts the conversion, the channel to convert, and the acquisition sample window duration. Multiple SOCx registers can be configured for the same trigger, channel, and/or acquisition window. Configuring multiple SOCx registers to use the same trigger will cause that trigger to perform a sequence of conversions, and configuring multiple SOCx registers for the same trigger and channel can be used to oversample the signal.
</p>

<p>
The various trigger sources that can be used to start an ADC conversion include the General Purpose Timers from each CPU subsystem, the ePWM modules, an external pin, and by software. Also, the flag setting of either ADCINT1 or ADCINT2 can be configured as a trigger source which can be used for continuous conversion operation. The ADC interrupt logic can generate up to four interrupts. The results for SOC 0 through 15 appear in result registers 0 through 15, respectively.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_module_block-1024x771.png" alt="" class="wp-image-5014" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_module_block-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_module_block-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_module_block-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_module_block.png 1382w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_adc_socx_functional_diagram"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x ADC SOCx Functional Diagram
</b>

<p>
The figure below is a conceptual view highlighting a single ADC start-of-conversion (SOC) functional flow from triggering to interrupt generation. This figure is replicated 16 times and the red text indicates the register names.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_socx_functional_diagram-1024x771.png" alt="" class="wp-image-5020" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_socx_functional_diagram-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_socx_functional_diagram-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_socx_functional_diagram-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_socx_functional_diagram.png 1382w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_adc_trigger"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x ADC Triggering
</b>

<p>
The top example in the figure below shows channels A1, A3, and A5 being converted with a trigger from EPWM1. After A5 is converted, ADCINT1 is generated. The bottom example shows channels A2, A4, and A6 being converted initially by a software trigger. Then, after A6 is converted, ADCINT2 is generated and also fed back as a trigger to start the process again.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_triggering-1024x771.png" alt="" class="wp-image-5025" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_triggering-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_triggering-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_triggering-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_triggering.png 1382w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_adc_ping_pong_trigger"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x ADC Ping-Pong Triggering
</b>

<p>
The ADC ping-pong triggering example in the figure below shows channels B0 through B5 being converted, triggered initially by software. After channel B2 is converted, ADCINT1 is generated, which also triggers channel B3. After channel B5 is converted, ADCINT2 is generated and is also fed back to start the process again from the beginning. Additionally, ADCINT1 and ADCINT2 are being used to manage the ping-pong interrupts for the interrupt service routines.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="688" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_ping_pong_trigger-1024x688.png" alt="" class="wp-image-5026" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_ping_pong_trigger-1024x688.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_ping_pong_trigger-300x201.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_ping_pong_trigger-768x516.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_ping_pong_trigger.png 1382w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_adc_conversion_priority"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x ADC Conversion Priority
</b>

<p>
When multiple triggers are received at the same time, the ADC conversion priority determines the order in which they are converted. Three different priority modes are supported. The default priority mode is round robin, where no start-of-conversion has an inherently higher priority over another, and the priority depends upon a round robin pointer. The round robin pointer operates in a circular fashion, constantly wrapping around to the beginning. In high priority mode, one or more than one start-of-conversion is assigned as high priority. The high priority start-of-conversion can then interrupt the round robin wheel, and after it has been converted the wheel will continue where it was interrupted. High priority mode is assigned first to the lower number start-of-conversion and then in increasing numerical order. If two high priority start-of-conversion triggers occur at the same time, the lower number will take precedence. Burst mode allows a single trigger to convert one or more than one start-of-conversion sequentially at a time. This mode uses a separate Burst Control register to select the burst size and trigger source.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_conversion_priority-1024x771.png" alt="" class="wp-image-5030" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_conversion_priority-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_conversion_priority-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_conversion_priority-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_conversion_priority.png 1382w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<p>
In this conversion priority functional diagram, the Start-of-Conversion Priority Control Register contains two bit fields. The Start-of-Conversion Priority bit fields determine the cutoff point between high priority and round robin mode, whereas the Round-Robin Pointer bit fields contains the last converted round robin start-of-conversion which determines the order of conversions.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_conversion_priority_functional_diagram-1024x771.png" alt="" class="wp-image-5032" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_conversion_priority_functional_diagram-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_conversion_priority_functional_diagram-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_conversion_priority_functional_diagram-768x579.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_conversion_priority_functional_diagram.png 1382w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="735" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_rrp_example-1024x735.png" alt="" class="wp-image-5035" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_rrp_example-1024x735.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_rrp_example-300x215.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_rrp_example-768x551.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_rrp_example.png 1382w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="716" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_hp_example-1024x716.png" alt="" class="wp-image-5036" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_hp_example-1024x716.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_hp_example-300x210.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_hp_example-768x537.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_hp_example.png 1382w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<p>
The Round-Robin Burst mode utilizes an ADC Burst Control Register to enable the burst mode, determine the burst size, and select the burst trigger source.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="669" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_rr_burst_mode_diagram-1024x669.png" alt="" class="wp-image-5040" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_rr_burst_mode_diagram-1024x669.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_rr_burst_mode_diagram-300x196.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_rr_burst_mode_diagram-768x502.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_rr_burst_mode_diagram.png 1382w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>



<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_rr_burst_mode_w_high_priority-1024x771.png" alt="" class="wp-image-5041" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_rr_burst_mode_w_high_priority-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_rr_burst_mode_w_high_priority-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_rr_burst_mode_w_high_priority-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_rr_burst_mode_w_high_priority.png 1382w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_adc_post_processing_block"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x ADC Post Processing Block
</b>

<p>
To further enhance the capabilities of the ADC, each ADC module incorporates four postprocessing blocks (PPB), and each PPB can be linked to any of the ADC result registers. The PPBs can be used for offset correction, calculating an error from a set-point, detecting a limit and zero-crossing, and capturing a trigger-to-sample delay.
</p>

<b>Offset correction</b> can simultaneously remove an offset associated with an ADCIN channel that was possibly caused by external sensors or signal sources with zero-overhead, thereby saving processor cycles.
</p>

<p>
<b>Error calculation</b> can automatically subtract out a computed error from a set-point or expected result register value, reducing the sample to output latency and software overhead.
</p>

<p>
<b>Limit and zero-crossing detection</b> automatically performs a check against a high/low limit or zero-crossing and can generate a trip to the ePWM and/or generate an interrupt. This lowers the sample to ePWM latency and reduces software overhead. Also, it can trip the ePWM based on an out-of-range ADC conversion without any CPU intervention which is useful for safety conscious applications.
</p>

<p>
<b>Sample delay capture</b> records the delay between when the SOCx is triggered and when it begins to be sampled. It can enable software techniques to be used for reducing the delay error.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_post_processing_block-1024x771.png" alt="" class="wp-image-5063" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_post_processing_block-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_post_processing_block-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_post_processing_block-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_post_processing_block.png 1457w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_post_processing_block_diagram-1024x770.png" alt="" class="wp-image-5064" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_post_processing_block_diagram-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_post_processing_block_diagram-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_post_processing_block_diagram-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_post_processing_block_diagram.png 1457w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_ppb_interrupt_event-1024x770.png" alt="" class="wp-image-5067" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_ppb_interrupt_event-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_ppb_interrupt_event-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_ppb_interrupt_event-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_ppb_interrupt_event.png 1457w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_adc_clocking_flow"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x ADC Clocking Flow
</b>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_clocking_flow-1024x771.png" alt="" class="wp-image-5071" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_clocking_flow-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_clocking_flow-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_clocking_flow-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_clocking_flow.png 1457w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_adc_converter_registers"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x ADC Converter Registers
</b>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="631" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_converter_registers-1024x631.png" alt="" class="wp-image-5075" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_converter_registers-1024x631.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_converter_registers-300x185.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_converter_registers-768x473.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_converter_registers.png 1457w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_adc_control_registers"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x ADC Control Registers
</b>

</div>



<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="744" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_control_register_1-1024x744.png" alt="" class="wp-image-5076" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_control_register_1-1024x744.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_control_register_1-300x218.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_control_register_1-768x558.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_control_register_1.png 1457w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_control_register_2-1024x771.png" alt="" class="wp-image-5077" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_control_register_2-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_control_register_2-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_control_register_2-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_control_register_2.png 1457w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_soc_control_register-1024x770.png" alt="" class="wp-image-5080" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_soc_control_register-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_soc_control_register-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_soc_control_register-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_soc_control_register.png 1457w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="722" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_interrupt_trigger_soc_select-1024x722.png" alt="" class="wp-image-5083" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_interrupt_trigger_soc_select-1024x722.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_interrupt_trigger_soc_select-300x212.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_interrupt_trigger_soc_select-768x542.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_interrupt_trigger_soc_select.png 1457w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_soc_priority_control_register-1024x770.png" alt="" class="wp-image-5084" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_soc_priority_control_register-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_soc_priority_control_register-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_soc_priority_control_register-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_soc_priority_control_register.png 1457w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_burst_control_register-1024x771.png" alt="" class="wp-image-5085" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_burst_control_register-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_burst_control_register-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_burst_control_register-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_burst_control_register.png 1457w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_interrupt_select_x_y_register-1024x770.png" alt="" class="wp-image-5088" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_interrupt_select_x_y_register-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_interrupt_select_x_y_register-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_interrupt_select_x_y_register-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_interrupt_select_x_y_register.png 1457w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_adc_conversion_result_registers"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x ADC Conversion Result Registers
</b>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="696" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_conversion_result_register_12_bit-1024x696.png" alt="" class="wp-image-5090" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_conversion_result_register_12_bit-1024x696.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_conversion_result_register_12_bit-300x204.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_conversion_result_register_12_bit-768x522.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_conversion_result_register_12_bit.png 1457w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_conversion_result_register_16-1024x770.png" alt="" class="wp-image-5091" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_conversion_result_register_16-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_conversion_result_register_16-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_conversion_result_register_16-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_conversion_result_register_16.png 1457w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_adc_signed_input_voltages"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x ADC Signed Input Voltages
</b>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_signed_input_voltages-1024x771.png" alt="" class="wp-image-5095" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_signed_input_voltages-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_signed_input_voltages-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_signed_input_voltages-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_signed_input_voltages.png 1457w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_adc_calibration_reference"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x ADC Calibration and Reference
</b>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_builtin_adc_calibration-1024x770.png" alt="" class="wp-image-5096" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_builtin_adc_calibration-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_builtin_adc_calibration-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_builtin_adc_calibration-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_builtin_adc_calibration.png 1457w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_manual_adc_calibration-1024x771.png" alt="" class="wp-image-5097" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_manual_adc_calibration-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_manual_adc_calibration-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_manual_adc_calibration-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_manual_adc_calibration.png 1457w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_analog_subsystem_external_ref-1024x771.png" alt="" class="wp-image-5098" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_analog_subsystem_external_ref-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_analog_subsystem_external_ref-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_analog_subsystem_external_ref-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_adc_analog_subsystem_external_ref.png 1457w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
Reference
</b>

<p>
[1] <a href="https://www.ti.com/video/series/c2000-f2837xd-microcontroller-one-day-workshop-series.html" style="color: blue;">
TMS320F2837xD Microcontroller Workshop</a>
</p>

</div>



<br><br>
<a href="#top" style="font-size:20px; color: blue;">Back to top of the page</a>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4590</post-id>	</item>
		<item>
		<title>TI C2000: General-Purpose I/O (GPIO) and PinMux</title>
		<link>https://hangpersonal.com/2026/02/02/c2000-gpio-pinmux/</link>
		
		<dc:creator><![CDATA[hangcui1201]]></dc:creator>
		<pubDate>Tue, 03 Feb 2026 02:19:29 +0000</pubDate>
				<category><![CDATA[Embedded System]]></category>
		<guid isPermaLink="false">https://hangpersonal.com/?p=4418</guid>

					<description><![CDATA[TI C2000 Real-Time Microcontroller: Control, Sensing, and Communication TMS320F28x7x General Purpose Digital I/O TMS320F28x7x GPIO Input Qualification TMS320F28x7x GPIO Input X-Bar TMS320F28x7x GPIO Output X-Bar TMS320F28x7x External Interrupts TMS320F28x7x General Purpose Digital I/O The F2837xD device incorporates a multiplexing scheme to enable each I/O pin to be configured as a GPIO pin or one of...]]></description>
										<content:encoded><![CDATA[
<a href="https://hangpersonal.com/embedded-system/ti-mcu/c2000-tutorials/" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TI C2000 Real-Time Microcontroller: Control, Sensing, and Communication
</a>
<br><br>



<ul style="margin-top:30px; margin-bottom:30px;">

<li style="margin-bottom:16px;">
<a href="#c28x_gpio" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x General Purpose Digital I/O
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_gpio_input" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x GPIO Input Qualification
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_input_xbar" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x GPIO Input X-Bar
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_output_xbar" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x GPIO Output X-Bar
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_external_interrupt" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x External Interrupts
</a>
</li> 

</ul>



<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_gpio"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x General Purpose Digital I/O
</b>

<p>
The F2837xD device incorporates a multiplexing scheme to enable each I/O pin to be configured as a GPIO pin or one of several peripheral I/O signals. Sharing a pin across multiple functions maximizes application flexibility while minimizing package size and cost. A GPIO Group multiplexer and four GPIO Index multiplexers provide a double layer of multiplexing to allow up to twelve independent peripheral signals and a digital I/O function to share a single pin.
</p>

<p>
Each output pin can be controlled by either a peripheral or CPU1, CPU1 CLA, CPU2, or CPU2 CLA. However, the peripheral multiplexing and pin assignment can only be configured by CPU1. By default, all of the pins are configured as GPIO, and when configured as a signal input pin, a qualification sampling period can be specified to remove unwanted noise. Optionally, each pin has an internal pullup resistor that can be enabled in order to keep the input pin in a known state when no external signal is driving the pin. 
</p>

<p>
The I/O pins are grouped into six ports, and each port has 32 pins except for the sixth port which has nine pins (i.e. the remaining I/O pins). For a GPIO, each port has a series of registers that are used to control the value on the pins, and within these registers each bit corresponds to one GPIO pin.
</p>

<p>
If the pin is configured as GPIO, a direction (DIR) register is used to specify the pin as either an input or output. By default, all GPIO pins are inputs. The current state of a GPIO pin corresponds to a bit value in a data (DAT) register, regardless if the pin is configured as GPIO or a peripheral function. Writing to the DAT register bit field clears or sets the corresponding output latch, and if the pin is configured as an output the pin will be driven either low or high. The state of various GPIO output pins on the same port can be easily modified using the SET, CLEAR, and TOGGLE registers. The advantage of using these registers is a single instruction can be used to modify only the pins specified without disturbing the other pins. This also eliminates any timing issues that may occur when writing directly to the data registers.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_grouping-1024x771.png" alt="" class="wp-image-4942" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_grouping-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_grouping-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_grouping-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_grouping.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_block_diagram-1024x770.png" alt="" class="wp-image-4946" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_block_diagram-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_block_diagram-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_block_diagram-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_block_diagram.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_gpio_input"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x GPIO Input Qualification
</b>

<p>
The input qualification scheme is very flexible, and the type of input qualification can be configured for each GPIO pin individually. In the case of a GPIO input pin, the qualification can be specified as only synchronize to SYSCLKOUT or qualification by a sampling window. For pins that are configured as peripheral inputs, the input can also be asynchronous in addition to synchronized to SYSCLKOUT or qualified by a sampling window.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="772" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_input_qualification-1024x772.png" alt="" class="wp-image-4950" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_input_qualification-1024x772.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_input_qualification-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_input_qualification-768x579.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_input_qualification.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_input_qual_register-1024x770.png" alt="" class="wp-image-4952" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_input_qual_register-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_input_qual_register-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_input_qual_register-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_input_qual_register.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_dual_core_gpio_select-1024x770.png" alt="" class="wp-image-4953" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_dual_core_gpio_select-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_dual_core_gpio_select-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_dual_core_gpio_select-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_dual_core_gpio_select.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_control_data_register-1024x770.png" alt="" class="wp-image-4955" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_control_data_register-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_control_data_register-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_control_data_register-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_control_data_register.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_input_xbar"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x GPIO Input X-Bar
</b>

<p>
The Input X-BAR is used to route external GPIO signals into the device. It has access to every GPIO pin, where each signal can be routed to any or multiple destinations which include the ADCs, eCAPs, ePWMs, Output X-BAR, and external interrupts. This provides additional flexibility above the multiplexing scheme used by the GPIO structure. Since the GPIO does not affect the Input X-BAR, it is possible to route the output of one peripheral to another, such as measuring the output of an ePWM with an eCAP for frequency testing.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="772" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_input_xbar-1024x772.png" alt="" class="wp-image-4961" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_input_xbar-1024x772.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_input_xbar-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_input_xbar-768x579.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_input_xbar.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="772" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_input_xbar_architecture-1024x772.png" alt="" class="wp-image-4963" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_input_xbar_architecture-1024x772.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_input_xbar_architecture-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_input_xbar_architecture-768x579.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_input_xbar_architecture.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_output_xbar"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x GPIO Output X-Bar
</b>

<p>
The Output X-BAR is used to route various internal signals out of the device. It contains eight outputs that are routed to the GPIO structure, where each output has one or multiple assigned pin positions, which are labeled as OUTPUTXBARx. Additionally, the Output X-BAR can select a single signal or logically OR up to 32 signals.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_output_xbar-1024x771.png" alt="" class="wp-image-4968" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_output_xbar-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_output_xbar-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_output_xbar-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_output_xbar.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_output_xbar_architecture-1024x771.png" alt="" class="wp-image-4969" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_output_xbar_architecture-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_output_xbar_architecture-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_output_xbar_architecture-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_output_xbar_architecture.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_external_interrupt"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x External Interrupts
</b>

<p>
<ul>
<li>Five external interrupt signals: XINT1, XINT2, XINT3, XINT4 and XINT5
</li>
<li>Each can be mapped to any of GPIO pins via the X-Bar Input architecture
</li>
<li>XINT1, XINT2 and XINT3 also each have a free-running 16-bit counter that measures the elapsed time between interrupts. The counter resets to zero each time the interrupt occurs
</li>
</ul>
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_configuring_external_interrupts-1024x770.png" alt="" class="wp-image-4974" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_configuring_external_interrupts-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_configuring_external_interrupts-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_configuring_external_interrupts-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_configuring_external_interrupts.png 1444w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
Reference
</b>

<p>
[1] <a href="https://www.ti.com/video/series/c2000-f2837xd-microcontroller-one-day-workshop-series.html" style="color: blue;">
TMS320F2837xD Microcontroller Workshop</a>
</p>

</div>



<br><br>
<a href="#top" style="font-size:20px; color: blue;">Back to top of the page</a>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4418</post-id>	</item>
		<item>
		<title>TI C2000: System Initialization</title>
		<link>https://hangpersonal.com/2026/02/02/c2000-system-initialization/</link>
		
		<dc:creator><![CDATA[hangcui1201]]></dc:creator>
		<pubDate>Tue, 03 Feb 2026 02:14:41 +0000</pubDate>
				<category><![CDATA[Embedded System]]></category>
		<guid isPermaLink="false">https://hangpersonal.com/?p=4414</guid>

					<description><![CDATA[TI C2000 Real-Time Microcontroller: Control, Sensing, and Communication TMS320F28x7x Oscillator / PLL Clock Module TMS320F28x7D Dual-Core System Clock TMS320F28x7x Watchdog Timer TMS320F28x7x Low Power Modes TMS320F28x7x Register Protection TMS320F28x7x Oscillator / PLL Clock Module The device clock signals are derived from one of four clock sources: Internal Oscillator 1 (INTOSC1) Internal Oscillator 2 (INTOSC2) External...]]></description>
										<content:encoded><![CDATA[
<a href="https://hangpersonal.com/embedded-system/ti-mcu/c2000-tutorials/" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TI C2000 Real-Time Microcontroller: Control, Sensing, and Communication
</a>
<br><br>



<ul style="margin-top:30px; margin-bottom:30px;">

<li style="margin-bottom:16px;">
<a href="#c28x_pll_clock" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x Oscillator / PLL Clock Module
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_dual_core_clock" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7D Dual-Core System Clock
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_wd_timer" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x Watchdog Timer
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_low_power_mode" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x Low Power Modes
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_register_protection" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x Register Protection
</a>
</li> 

</ul>



<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_pll_clock"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x Oscillator / PLL Clock Module
</b>

<p>
The device clock signals are derived from one of four clock sources: <br>
<ul>
<li>Internal Oscillator 1 (INTOSC1)
</li>
<li>Internal Oscillator 2 (INTOSC2)
</li>
<li>External Oscillator (XTAL)
</li>
<li>Auxiliary Clock Input (AUXCLKIN)
</li>
</ul>
</p>

<p>
At power-up, the device is clocked from the on-chip 10 MHz oscillator INTOSC2. INTSOC2 is the primary internal clock source, and is the default system clock at reset. The device also includes a redundant on-chip 10 MHz oscillator INTOSC1. INTOSC1 is a backup clock source, which normally only clocks the watchdog timers and missing clock detection circuit.
</p>

<p>
Additionally, the device includes dedicated X1 and X2 pins for supporting an external clock source such as an external oscillator, crystal, or resonator. The AUXCLKIN is used as the bit clock source for the USB and CAN to generate the precise frequency requirements.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_osc_pll_clock-1024x771.png" alt="" class="wp-image-4900" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_osc_pll_clock-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_osc_pll_clock-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_osc_pll_clock-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_osc_pll_clock.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<p>
The clock sources can be multiplied using the PLL and divided down to produce the desired clock frequencies for a specific application. By default, the CPU1 subsystem owns the PLL clock configuration, however a clock control semaphore is available for the CPU2 subsystem to access the clock configuration registers.
</p>

<p>
A clock source can be fed directly into the core or multiplied using the PLL. The PLL gives us the capability to use the internal 10 MHz oscillator and run the device at the full clock frequency. If the input clock is removed after the PLL is locked, the input clock failed detect circuitry will issue a limp mode clock of 1 to 4 MHz. Additionally, an internal device reset will be issued. The lowspeed peripheral clock prescaler is used to clock some of the communication peripherals.
</p>

<p>
The PLL has a 7-bit integer and 2-bit fractional ratio control to select different CPU clock rates. The C28x CPU provides a SYSCLK clock signal. This signal is prescaled to provide a clock source for some of the on-chip communication peripherals through the low-speed peripheral clock prescaler. Other peripherals are clocked by SYSCLK and use their own clock prescalers for operation.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_pll_lospcp-1024x771.png" alt="" class="wp-image-4905" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_pll_lospcp-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_pll_lospcp-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_pll_lospcp-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_pll_lospcp.png 1228w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D5CED9;--cbp-line-number-width:calc(2 * 0.6 * 1rem);line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" style="color:#D5CED9;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>// External Oscillator (XTAL): 20 MHz
// PLLSYSCLK = (XTAL_OSC) * (IMULT + FMULT) / (PLLSYSCLKDIV)
// CPUx.SYSCLK = PLLSYSCLK = 200 MHz
// CPUx.LSPCLK = PLLSYSCLK / LSPCLKDIV = 50 MHz
ClkCfgRegs.CLKSRCCTL1.OSCCLKSRCSEL   = 0x01  // EXTCLK
ClkCfgRegs.SYSPLLMULT.bit.IMULT      = 0x14  // 20
ClkCfgRegs.SYSPLLMULT.bit.FMULT      = 0x00  // 0
ClkCfgRegs.SYSPLLCTL1.PLLCLKEN       = 0x01  // PLL Clock Enable
ClkCfgRegs.SYSCLKDIVSEL.PLLSYSCLKDIV = 0x01  // Divide by 2
ClkCfgRegs.LOSPCP.LSPCLKDIV          = 0x02  // Divide by 4</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki andromeda" style="background-color: #23262E" tabindex="0"><code><span class="line"><span style="color: #A0A1A7CC">// External Oscillator (XTAL): 20 MHz</span></span>
<span class="line"><span style="color: #A0A1A7CC">// PLLSYSCLK = (XTAL_OSC) * (IMULT + FMULT) / (PLLSYSCLKDIV)</span></span>
<span class="line"><span style="color: #A0A1A7CC">// CPUx.SYSCLK = PLLSYSCLK = 200 MHz</span></span>
<span class="line"><span style="color: #A0A1A7CC">// CPUx.LSPCLK = PLLSYSCLK / LSPCLKDIV = 50 MHz</span></span>
<span class="line"><span style="color: #D5CED9">ClkCfgRegs.CLKSRCCTL1.OSCCLKSRCSEL   </span><span style="color: #EE5D43">=</span><span style="color: #D5CED9"> </span><span style="color: #C74DED">0x</span><span style="color: #F39C12">01</span><span style="color: #A0A1A7CC">  // EXTCLK</span></span>
<span class="line"><span style="color: #D5CED9">ClkCfgRegs.SYSPLLMULT.bit.IMULT      </span><span style="color: #EE5D43">=</span><span style="color: #D5CED9"> </span><span style="color: #C74DED">0x</span><span style="color: #F39C12">14</span><span style="color: #A0A1A7CC">  // 20</span></span>
<span class="line"><span style="color: #D5CED9">ClkCfgRegs.SYSPLLMULT.bit.FMULT      </span><span style="color: #EE5D43">=</span><span style="color: #D5CED9"> </span><span style="color: #C74DED">0x</span><span style="color: #F39C12">00</span><span style="color: #A0A1A7CC">  // 0</span></span>
<span class="line"><span style="color: #D5CED9">ClkCfgRegs.SYSPLLCTL1.PLLCLKEN       </span><span style="color: #EE5D43">=</span><span style="color: #D5CED9"> </span><span style="color: #C74DED">0x</span><span style="color: #F39C12">01</span><span style="color: #A0A1A7CC">  // PLL Clock Enable</span></span>
<span class="line"><span style="color: #D5CED9">ClkCfgRegs.SYSCLKDIVSEL.PLLSYSCLKDIV </span><span style="color: #EE5D43">=</span><span style="color: #D5CED9"> </span><span style="color: #C74DED">0x</span><span style="color: #F39C12">01</span><span style="color: #A0A1A7CC">  // Divide by 2</span></span>
<span class="line"><span style="color: #D5CED9">ClkCfgRegs.LOSPCP.LSPCLKDIV          </span><span style="color: #EE5D43">=</span><span style="color: #D5CED9"> </span><span style="color: #C74DED">0x</span><span style="color: #F39C12">02</span><span style="color: #A0A1A7CC">  // Divide by 4</span></span></code></pre></div>



<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_dual_core_clock"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7D Dual-Core System Clock
</b>

<p>
The PLL system clock is fed to both the CPU1 and CPU2 subsystems. By default, all peripherals are assigned to the CPU1 subsystem. Using the CPU selection register, each individual peripheral can be assigned to either the CPU1 or CPU2 subsystem. The clock for the EPWM modules are limited to 100 MHz, and by using the peripheral clock divider selection register, this clock can be divided down to meet this specification.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_dual_core_clock-1024x770.png" alt="" class="wp-image-4915" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_dual_core_clock-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_dual_core_clock-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_dual_core_clock-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_dual_core_clock.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_clock_source_control_register-1024x770.png" alt="" class="wp-image-4917" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_clock_source_control_register-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_clock_source_control_register-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_clock_source_control_register-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_clock_source_control_register.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<p>
The dual-core CPU select register selects either CPU1 or CPU2 as the clock source for each peripheral. The peripheral clock control register allows individual peripheral clock signals to be enabled or disabled. If a peripheral is not being used, its clock signal could be disabled, thus reducing power consumption.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_dual_core_cpu_select_register-1024x771.png" alt="" class="wp-image-4920" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_dual_core_cpu_select_register-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_dual_core_cpu_select_register-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_dual_core_cpu_select_register-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_dual_core_cpu_select_register.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_peripheral_clock_control_register-1024x771.png" alt="" class="wp-image-4922" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_peripheral_clock_control_register-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_peripheral_clock_control_register-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_peripheral_clock_control_register-768x579.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_peripheral_clock_control_register.png 1228w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_wd_timer"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x Watchdog Timer
</b>

<p>
The watchdog timer is a safety feature, which resets the device if the program runs away or gets trapped in an unintended infinite loop. The watchdog counter runs independent of the CPU. If the counter overflows, a user-selectable reset or interrupt is triggered. During runtime the correct key values in the proper sequence must be written to the watchdog key register in order to reset the counter before it overflows.
</p>

<p>
Resets the C28x if the CPU crashes
<ul>
<li>Watchdog counter runs independent of CPU
</li>
<li>If counter overflows, a reset or interrupt is triggered (user selectable)
</li>
<li>CPU must write correct data key sequence to reset the counter before overflow
</li>
</ul>
</p>

<p>
The watchdog timer provides a safeguard against CPU crashes by automatically initiating a reset if it is not serviced by the CPU at regular intervals. In motor control applications, this helps protect the motor and drive electronics when control is lost due to a CPU lockup. Any CPU reset will set the PWM outputs to a high-impedance state, which should turn off the power converters in a properly designed system.
</p>

<p>
The watchdog timer starts running immediately after system power-up/reset, and must be dealt with by software soon after. Specifically, the watchdog must be serviced or disabled within 13.11 milliseconds (using a 10 MHz watchdog clock) after any reset before a watchdog initiated reset will occur. This translates into 131,072 watchdog clock cycles, which is a seemingly tremendous amount. Indeed, this is plenty of time to get the watchdog configured as desired and serviced. A failure of your software to properly handle the watchdog after reset could cause an endless cycle of watchdog initiated resets to occur.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_wd_timer_module-1024x771.png" alt="" class="wp-image-4928" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_wd_timer_module-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_wd_timer_module-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_wd_timer_module-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_wd_timer_module.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<p>
The watchdog clock is divided by 512 and prescaled, if desired for slower watchdog time periods. A watchdog disable switch allows the watchdog to be enabled and disabled. Also a watchdog override switch provides an additional safety mechanism to insure the watchdog cannot be disabled. Once set, the only means to disable the watchdog is by a system reset.
</p>

<p>
During initialization, a value 101 is written into the watchdog check bit fields. Any other values will cause a reset or interrupt. During run time, the correct keys must be written into the watchdog key register before the watchdog counter overflows and issues a reset or interrupt. Issuing a reset or interrupt is user-selectable. The watchdog also contains an optional windowing feature that requires a minimum delay between counter resets.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_wd_period_selection-1024x771.png" alt="" class="wp-image-4931" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_wd_period_selection-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_wd_period_selection-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_wd_period_selection-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_wd_period_selection.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_wd_timer_control_register-1024x770.png" alt="" class="wp-image-4932" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_wd_timer_control_register-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_wd_timer_control_register-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_wd_timer_control_register-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_wd_timer_control_register.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_resetting_wd-1024x770.png" alt="" class="wp-image-4933" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_resetting_wd-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_resetting_wd-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_resetting_wd-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_resetting_wd.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_wdkey_write_result-1024x770.png" alt="" class="wp-image-4934" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_wdkey_write_result-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_wdkey_write_result-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_wdkey_write_result-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_wdkey_write_result.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_system_control_status_register-1024x771.png" alt="" class="wp-image-4935" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_system_control_status_register-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_system_control_status_register-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_system_control_status_register-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_system_control_status_register.png 1227w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_low_power_mode"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x Low Power Modes
</b>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_low_power_mode-1024x771.png" alt="" class="wp-image-4981" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_low_power_mode-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_low_power_mode-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_low_power_mode-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_low_power_mode.png 1443w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_low_power_mode_control_register-1024x770.png" alt="" class="wp-image-4982" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_low_power_mode_control_register-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_low_power_mode_control_register-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_low_power_mode_control_register-768x577.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_low_power_mode_control_register.png 1443w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_low_power_mode_exit-1024x770.png" alt="" class="wp-image-4983" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_low_power_mode_exit-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_low_power_mode_exit-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_low_power_mode_exit-768x577.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_low_power_mode_exit.png 1443w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_low_power_wakeup_select-1024x771.png" alt="" class="wp-image-4984" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_low_power_wakeup_select-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_low_power_wakeup_select-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_low_power_wakeup_select-768x578.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_gpio_low_power_wakeup_select.png 1443w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_register_protection"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x Register Protection
</b>

<p>
A series of lock registers can be used to protect several system configuration settings from spurious CPU writes. After the lock registers bits are set, the respective locked registers can no longer be modified by software.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_lock_protection_register-1024x770.png" alt="" class="wp-image-4988" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_lock_protection_register-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_lock_protection_register-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_lock_protection_register-768x577.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_lock_protection_register.png 1443w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_eallow_protection1-1024x770.png" alt="" class="wp-image-4990" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_eallow_protection1-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_eallow_protection1-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_eallow_protection1-768x577.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_eallow_protection1.png 1443w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/02/c28_eallow_protection2-1024x770.png" alt="" class="wp-image-4991" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/02/c28_eallow_protection2-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_eallow_protection2-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_eallow_protection2-768x577.png 768w, https://hangpersonal.com/wp-content/uploads/2026/02/c28_eallow_protection2.png 1443w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
Reference
</b>

<p>
[1] <a href="https://www.ti.com/video/series/c2000-f2837xd-microcontroller-one-day-workshop-series.html" style="color: blue;">
TMS320F2837xD Microcontroller Workshop</a>
</p>

</div>



<br><br>
<a href="#top" style="font-size:20px; color: blue;">Back to top of the page</a>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4414</post-id>	</item>
		<item>
		<title>TI C2000: Reset and Boot Process</title>
		<link>https://hangpersonal.com/2026/01/31/c2000-reset/</link>
		
		<dc:creator><![CDATA[hangcui1201]]></dc:creator>
		<pubDate>Sun, 01 Feb 2026 05:20:23 +0000</pubDate>
				<category><![CDATA[Embedded System]]></category>
		<guid isPermaLink="false">https://hangpersonal.com/?p=4054</guid>

					<description><![CDATA[TI C2000 Real-Time Microcontroller: Control, Sensing, and Communication TMS320F28x7x Reset Sources TMS320F28x7x Dual-Core Boot Process TMS320F28x7x Reset &#8211; Bootloader TMS320F28x7x Emulation Boot Mode TMS320F28x7x Stand-Alone Boot Mode TMS320F28x7x Reset Code Flow TMS320F28x7x Emulation Boot Mode using GEL TMS320F28x7x main() TMS320F28x7x Peripheral Software Reset Registers TMS320F28x7x Reset Sources The device has various reset sources, but in...]]></description>
										<content:encoded><![CDATA[
<a href="https://hangpersonal.com/embedded-system/ti-mcu/c2000-tutorials/" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TI C2000 Real-Time Microcontroller: Control, Sensing, and Communication
</a>
<br><br>



<ul style="margin-top:30px; margin-bottom:30px;">

<li style="margin-bottom:16px;">
<a href="#c28x_reset_sources" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x Reset Sources
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_dual_core_boot" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x Dual-Core Boot Process
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_reset_bootloader" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x Reset &#8211; Bootloader
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_emulation_boot" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x Emulation Boot Mode
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_standalone_boot" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x Stand-Alone Boot Mode
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_reset_code_flow" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x Reset Code Flow
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_ccs_gel" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x Emulation Boot Mode using GEL
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_main" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x main()
</a>
</li> 

<li style="margin-bottom:16px;">
<a href="#c28x_peri_software_reset" style="font-family: 'Inter', sans-serif; font-size: 22px; color: blue;">
TMS320F28x7x Peripheral Software Reset Registers
</a>
</li> 

</ul>



<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_reset_sources"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x Reset Sources
</b>

<p>
The device has various reset sources, but in general resets on CPU1 will reset the entire device and resets on CPU2 will reset only the CPU2 subsystem. The reset sources include an external reset pin, watchdog timer reset, power-on reset which generates a device reset during power-up conditions, Hibernate reset, as well as a missing clock detect reset. A reset cause register (RESC) is available for each CPU subsystem which can be read to determine the cause of the reset. The external reset pin is the main chip-level reset for the device, and it resets both CPU subsystems to their default state. The power-on reset (POR) circuit is used to create a clean reset throughout the device during power-up, while suppressing glitches on the input/output pins.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="387" src="https://hangpersonal.com/wp-content/uploads/2026/01/C28x_reset_resources-1024x387.png" alt="" class="wp-image-4409" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/01/C28x_reset_resources-1024x387.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/01/C28x_reset_resources-300x113.png 300w, https://hangpersonal.com/wp-content/uploads/2026/01/C28x_reset_resources-768x290.png 768w, https://hangpersonal.com/wp-content/uploads/2026/01/C28x_reset_resources-1536x581.png 1536w, https://hangpersonal.com/wp-content/uploads/2026/01/C28x_reset_resources-2048x774.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:60px; margin-bottom:40px;">

<b id="c28x_dual_core_boot"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x Dual-Core Boot Process
</b>

<p>
<ul>
<li>CPU1 starts execution from CPU1 boot ROM while CPU2 is held in reset
</li>
<li>CPU1 controls the boot process
</li>
<li>CPU2 goes through its own boot process under the control of CPU1 – except when CPU2 is set to boot-to-flash
</li>
<li>IPC registers are used to communicate between CPU1 and CPU2 during the boot process
</li>
</ul>
</p>

<p>
During the F2837xD dual-core microcontroller booting, CPU1 controls the boot process and starts execution from the CPU1 boot ROM while CPU2 is held in reset. CPU2 goes through its own boot process under the control of CPU1, except when CPU2 is set to boot-to-flash. The IPC registers are used to communicate between CPU1 and CPU2 during the boot process. Additionally, the boot ROM contains the necessary boot loading routines to support peripheral boot loading.
</p>

</div>



<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_reset_bootloader"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x Reset &#8211; Bootloader
</b>

<p>
When the device is reset, the peripheral interrupt expansion block, also known as the PIE block, and the master interrupt switch INTM are disabled. This prevents any interrupts during the boot process. The program counter is set to 0x3FFFC0, where the reset vector is fetched. In the boot code the JTAG Test Reset line (TRST line) is checked to determine if the emulator is connected.
</p>

<p>
If the emulator is connected, then the boot process follows the Emulation Boot mode flow. In Emulation Boot mode, the boot is determined by the EMU_BOOTCTRL register located in the PIE RAM. Specific details about the boot flow are then determined by the EMU_KEY and EMU_BMODE bit fields in the EMU_BOOTCTRL register.
</p>

<p>
If the emulator is not connected, the boot process follows the Stand-alone Boot mode flow. In Stand-alone Boot mode, the boot is determined by two GPIO pins and the Z1-BOOTCTRL and Z2-BOOTCTRL registers located in the OTP. Specific details about the boot flow are then determined by the OTP_KEY and OTP_BMODE bit fields in the Z1-BOOTCTRL and Z2-BOOTCTRL registers
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/01/c28_reset_bootloader-1024x770.png" alt="" class="wp-image-4766" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/01/c28_reset_bootloader-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/01/c28_reset_bootloader-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/01/c28_reset_bootloader-768x577.png 768w, https://hangpersonal.com/wp-content/uploads/2026/01/c28_reset_bootloader.png 1443w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_emulation_boot"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x Emulation Boot Mode
</b>

<p>
In Emulation Boot mode, first the EMU_KEY bit fields are checked for a value of 0x5A. If either EMU_KEY or EMU_BMODE bit fields are invalid, the “Wait” boot mode is entered. These bit field values can then be modified using the debugger and then a reset is issued to restart the boot process. This is the typical sequence followed during device power-up with the emulator connected, allowing the user to control the boot process using the debugger.
</p>

<p>
Once the EMU_KEY bit fields are set to 0x5A, then the EMU_BMODE bit field values determines the boot mode. The various Emulation Boot modes supported are Parallel I/O, SCI, SPI, I2C, CAN, M0 RAM, FLASH, USB, and Wait. The GetMode and when EMU_BMODE bit fields have a value of 0xFE or 0xFF are used to emulate the Stand-alone Boot mode.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/01/c28_emulation_boot_1-1024x771.png" alt="" class="wp-image-4772" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/01/c28_emulation_boot_1-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/01/c28_emulation_boot_1-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/01/c28_emulation_boot_1-768x579.png 768w, https://hangpersonal.com/wp-content/uploads/2026/01/c28_emulation_boot_1.png 1127w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:30px; margin-bottom:30px;">
</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/01/c28_emulation_boot_2-1024x771.png" alt="" class="wp-image-4773" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/01/c28_emulation_boot_2-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/01/c28_emulation_boot_2-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/01/c28_emulation_boot_2-768x579.png 768w, https://hangpersonal.com/wp-content/uploads/2026/01/c28_emulation_boot_2.png 1127w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_standalone_boot"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x Stand-Alone Boot Mode
</b>

<p>
In Stand-alone boot mode, first GPIO pins 72 and 84 are checked to determine if the boot mode is Parallel I/O, SCI, Wait, or GetMode. These pin can be remapped to any GPIO pins, if needed, and the default “unconnected” pins set the boot mode to GetMode. In GetMode the OTP_KEY bit fields in the Z1-BOOTCTRL and Z2-BOOTCTRL registers are checked for a value of 0x5A. An un-programmed device will have these locations set as 1’s, and the flash boot mode is entered, as expected for the default mode. If the OTP_KEY bit fields in either Z1-BOOTCTRL or Z2-BOOTCTRL registers has a value of 0x5A, then the OTP_BMODE bit field values in the registers determines the boot mode. The various Stand-alone Boot modes supported are Parallel I/O, SCI, SPI, I2C, CAN, M0 RAM, FLASH, USB, and Wait.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/01/c28_standalone_boot-1024x771.png" alt="" class="wp-image-4780" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/01/c28_standalone_boot-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/01/c28_standalone_boot-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/01/c28_standalone_boot-768x579.png 768w, https://hangpersonal.com/wp-content/uploads/2026/01/c28_standalone_boot.png 1127w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b id="c28x_reset_code_flow"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x Reset Code Flow
</b>

<p>
The reset code flow is as follows. After reset, the program counter is set to 0x3FFFC0, where the flow is vectored to the Init_Boot code in the Boot ROM. The Init_Boot code defines the execution entry based on emulation boot mode or stand-alone boot mode. The entry point can be executing boot-loading routines, entry to the flash, or M0 RAM.
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="771" src="https://hangpersonal.com/wp-content/uploads/2026/01/c28_reset_code_flow-1024x771.png" alt="" class="wp-image-4784" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/01/c28_reset_code_flow-1024x771.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/01/c28_reset_code_flow-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/01/c28_reset_code_flow-768x579.png 768w, https://hangpersonal.com/wp-content/uploads/2026/01/c28_reset_code_flow.png 1127w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:20px;">

<b id="c28x_ccs_gel"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x Emulation Boot Mode using GEL
</b>

<p>
The CCS GEL file is used to setup the boot modes for the device during debug. By default the GEL file provides functions to set the device for <b>Boot to SARAM</b> and <b>Boot to FLASH</b>. It can be modified to include other boot mode options, if desired.
</p>

<p>
To access the GEL file use: Views -> GEL Files
</p>

</div>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="618" height="263" src="https://hangpersonal.com/wp-content/uploads/2026/01/c28_ccs_gel.png" alt="" class="wp-image-4789" style="width:700px" srcset="https://hangpersonal.com/wp-content/uploads/2026/01/c28_ccs_gel.png 618w, https://hangpersonal.com/wp-content/uploads/2026/01/c28_ccs_gel-300x128.png 300w" sizes="auto, (max-width: 618px) 100vw, 618px" /></figure>



<div class="article-text" style="margin-top:50px; margin-bottom:20px;">

<b id="c28x_main"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x main()
</b>

<p>
When the bootloader process is completed, a branch to the compiler runtime support library is located at the code entry point. This branch to <b>_c_int00</b> is executed, then the compiler environment is set up, and finally main is called.
</p>

<p>
At the code entry point, branch to _c_int00()
<ul>
<li>Part of compiler runtime support library
</li>
<li>Sets up compiler environment
</li>
<li>Calls main()
</li>
</ul>
</p>

</div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="463" src="https://hangpersonal.com/wp-content/uploads/2026/01/c28_main-1024x463.png" alt="" class="wp-image-4794" style="width:800px" srcset="https://hangpersonal.com/wp-content/uploads/2026/01/c28_main-1024x463.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/01/c28_main-300x136.png 300w, https://hangpersonal.com/wp-content/uploads/2026/01/c28_main-768x347.png 768w, https://hangpersonal.com/wp-content/uploads/2026/01/c28_main-1536x694.png 1536w, https://hangpersonal.com/wp-content/uploads/2026/01/c28_main.png 1658w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="article-text" style="margin-top:50px; margin-bottom:20px;">

<b id="c28x_peri_software_reset"
   style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
TMS320F28x7x Peripheral Software Reset Registers
</b>

<p>
The peripheral software reset register contains the reset bit for each peripheral.
</p>

</div>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="770" src="https://hangpersonal.com/wp-content/uploads/2026/01/c28_peri_software_reset-1024x770.png" alt="" class="wp-image-4801" srcset="https://hangpersonal.com/wp-content/uploads/2026/01/c28_peri_software_reset-1024x770.png 1024w, https://hangpersonal.com/wp-content/uploads/2026/01/c28_peri_software_reset-300x226.png 300w, https://hangpersonal.com/wp-content/uploads/2026/01/c28_peri_software_reset-768x577.png 768w, https://hangpersonal.com/wp-content/uploads/2026/01/c28_peri_software_reset.png 1443w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<div class="article-text" style="margin-top:50px; margin-bottom:40px;">

<b style="display:block;
          font-family: 'Inter', sans-serif; 
          font-size: 22px; 
          color: black; 
          margin-top:0px; 
          margin-bottom:20px;">
Reference
</b>

<p>
[1] <a href="https://www.ti.com/video/series/c2000-f2837xd-microcontroller-one-day-workshop-series.html" style="color: blue;">
TMS320F2837xD Microcontroller Workshop</a>
</p>

</div>



<br><br>
<a href="#top" style="font-size:20px; color: blue;">Back to top of the page</a>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4054</post-id>	</item>
	</channel>
</rss>
