AN0821-simplicity-studio-c8051f85x-walkthrough
AN0821-simplicity-studio-c8051f85x-walkthrough
Walkthrough
(IDE and Configurator) to run on the C8051F850 ToolStick • Simplicity Studio makes the development
Daughter Card (TOOLSTICK850-DC). process easier, faster, and more efficient.
• Simplicity Configurator enables all
The same steps can be applied to develop a project to run on the C8051F850 UDP peripheral and pin initialization in a simple
MCU card (UPMU-F850 MCU). The project uses a potentiometer sampled via the ADC GUI.
to control the brightness of an LED by controlling the duty cycle of an output pin using • To improve download times and
the PWM. Simplicity Configurator will be used to generate hardware initialization code installation size on disk, Simplicity Studio
for hardware peripherals, and Simplicity IDE will be used to develop, build, download, downloads and installs the minimum
and debug the firmware project. components for your current task. The
software will automatically download new
Download and install Simplicity Studio from: http://www.silabs.com/simplicity-studio. components as needed.
1. Relevant Documents
• Simplicity IDE Guide—In Simplicity IDE, select [Help]>[Help Contents] to display the Simplicity IDE Guide as well as any installed
documentation, including data sheets and user’s guides.
• Simplicity Configurator Guide—In the Simplicity IDE, select [Help]>[Help Contents] to display this guide.
• AN0822: Simplicity Studio User’s Guide—In addition to the documentation within the tool itself, this document provides a discussion
of the Simplicity Studio tool. Application Notes are available on www.silabs.com/32bit-appnotes and www.silabs.com/8bit-appnotes.
• AN0823: Simplicity Configurator User’s Guide—In addition to the documentation within the tool itself, this document provides a dis-
cussion of the Simplicity Configurator tool. Application Notes are available on www.silabs.com/32bit-appnotes and www.silabs.com/
8bit-appnotes.
• C8051F850 Data Sheet—http://www.silabs.com/products/mcu/smallmcu/pages/c8051f85x-86x.aspx (Documentation Tab)
2. Getting Started
1. Verify that the shorting block on JP1 is installed on the TOOLSTICK850-DC daughter card.
2. Connect the daughter card to the ToolStick Base Adapter.
3. Connect one end of the USB extension cable to the ToolStick Base Adapter and connect the other end to a PC. The USB connec-
tion provides power to the ToolStick Debug Adapter and daughter card. The ToolStick Debug Adapter can be used to write to the
C8051F850 flash and to enable on-chip debug support.
The PWM LED project uses a potentiometer sampled by the ADC to control the brightness of an LED by controlling the duty cycle of an
output pin using the Programmable Counter Array (PCA) to generate a PWM waveform.
After configuring the Simplicity IDE, the next step is to create a new project using the [New Project] wizard. Each project has its own
source files, target configuration, SDK configuration, and build configurations such as the Debug and Release build configurations. The
IDE can be used to manage multiple projects in a collection called a workspace. Workspace settings are applied globally to all projects
within the workspace. This can include settings such as key bindings, window preferences, and code style and formatting options.
Project actions, such as build and debug are context sensitive. For example, the user must select a project in the Project Explorer view
in order to build that project.
Some peripherals provide calculators such as baud rate calculators, timer overflow rate calculators, and SPI clock rate calculators that
can be used to automatically calculate the necessary reload register value to generate the clock rate specified by the user. Configurator
also provides real-time validation of properties to ensure that a configuration is valid before downloading code to the MCU.
The following steps will detail the configuration of the C8051F850 peripherals to generate a PWM output based on the measured ADC
input. In summary:
• Timers
• Watchdog Timer
• WDT Enable—Disable
• TIMER 2 (16-bit Timer with Auto Reload, Overflow at 1 kHz)
• Run Control—Start
• Timer Overflow Frequency—1000
• PCA 0 (8-bit PWM, Frequency = 1 kHz)
• Channel 0 Capture/Compare Mode—Predefined 8~11-bit pulse modulator
• PCA Counter/Timer Run Control—Start
• Analog
• ADC 0 (8-bit Mode, 1x gain, Sample P1.2 on Timer 2 overflow)
• Enable 8-bit Mode—8-bit Mode
• Gain Control—1x gain
• Resolution—8-bit
• Enable ADC—Enabled
• Start of Conversion—Timer 2 overflow
• Positive Input Selection—ADC0.10 (P1.2)
• Voltage Reference
• Select Voltage Reference—VDD pin
• Core
• Interrupts
• Enable ADC0 Conversion Complete Interrupt—Enabled
• Enable All Interrupts—Enabled
• Port I/O
• Peripheral Mapping
• PCA0_CEX0—Checked
• Enable Crossbar—Enabled
• P0.0 - P0.7
• Skip—Skipped
• P1.0
• IOMode—Digital Push-Pull Output
• P1.2
• IOMode—Analog I/O
• Skip—Skipped
After creating a new MCU project using Simplicity Configurator, Studio will automatically switch to the Configuration perspective. This
perspective is tailored specifically for use with Configurator to initialize MCU peripherals. Special views will automatically be displayed
in this perspective that allow peripheral registers to be configured. The default tab in a new Configurator project is the Port I/O tab.
Create a new project by clicking [New Project] from the main landing page.
1. In the Project setup step, select [C8051F850 ToolStick Daughter Card Board (TOOLSTICK850DC)] from the combo box. This
will automatically select the C8051F850 part in the Part combo box.
2. Click the [Next] button.
3. Select the [Simplicity Configurator Program] radio button from the Project Type list. Simplicity Studio Configurator generates
hardware initialization code using a graphical interface.
4. Click the [Next] button.
5. In the Project Configuration step, enter your project name in the [Project Name] text box.
6. Click the [Finish] button.
2 4
Studio will automatically validate register configuration values and display any errors or warnings in the [Problems] view. Disable the
watchdog timer to fix the warning:
1. Double clicking on a warning or error will automatically display the property that raised the problem. Double click on the Watchdog
timer warning to automatically switch to the [Peripherals] editor and display the [Watchdog Timer] properties in the [Properties]
view.
2. The [Peripherals] tab shows all of the hardware peripherals that Configurator can generate initialization code for. Peripherals are
grouped by categories such as Analog, Communications, Core, and Timers.
3. Check the check box next to a peripheral to indicate that Configurator should generate code for the checked peripheral module.
Selecting a peripheral will display the peripheral properties for the selected peripheral in the [Properties] view.
4. Disable the watchdog timer to prevent unwanted device resets from occurring. Select the [WDT Enable] property in the [Proper-
ties] view and select [Disable] from the combo box. Press enter or deselect the property to confirm the new property value.
5. The watchdog timer warning in the [Problems] view should now disappear, indicating that the problem has been solved.
1
4
3.4 Step 4—Confirm that the MCU system clock is configured as SYSCLK / 8 or 3.0625 MHz
Next, configure Timer 2 to overflow at 1 kHz. This timer will serve as the ADC start-of-conversion source.
4 2
3.6 Step 6—Configure PCA 0 to output an 8-bit PWM signal on P1.0 at 1 kHz
Next, configure ADC 0 to acquire 8-bit samples on P1.2, the potentiometer pin, on Timer 2 overflow:
2
3
4
5
6
7
Enable ADC 0 conversion complete interrupts and enable the global interrupt enable flag:
2
3
4
1
Place PCA0_CEX0 on the P1.0 LED pin by skipping P0.0 through P0.7 on the crossbar:
Configure ADC0.10 / P1.2 (Potentiometer) for analog mode and skipped on the crossbar:
Enable the crossbar to enable the port pin drivers and weak pullup resistors:
1. Select [Port I/O] from the [Outline] view to display the Port Config properties.
2. Set the [Enable Crossbar] property to [Enabled].
After configuring peripheral properties, save the Configurator file (*.hwconf) to generate InitDevice.c, InitDevice.h, and Interrup
ts.c:
1. Select the F85x_PWM_LED.hwconf editor tab (assuming the initial project was called F85x_PWM_LED).
2. Click the [Save] button from the tool bar. The save file operation is context sensitive and will only save the currently active docu-
ment in the editor.
3. Configurator generates InitDevice.c, which contains source code to initialize the peripherals as configured in the GUI.
4. Configurator also generates InitDevice.h, which contains function prototypes for initialization routines.
5. Finally, Configurator generates Interrupts.c, which contains the interrupt service routines.
2 1
After generating hardware initialization functions using Simplicity Configurator, edit the source code to copy the ADC reading into the
PCA PWM output. The Eclipse framework provides a very powerful editor with rich features, such as C++ syntax error highlighting,
code completion, and source browse information to quickly locate symbol declarations.
Edit the project source code to change the PWM duty cycle based on the ADC sample to change the LED brightness:
Enter the following code into the ADC ISR and save the document:
ADC0CN0_ADINT = 0;
PCA0CPH0 = (uint8_t)(ADC0 >> 2);
Build the project and make sure that there are no errors or warnings:
4 3
Simplicity IDE supports many modern code editing features. For example, the IDE will automatically index all code within the project to
support symbol lookup. The code does not have to build completely for the indexer to work. However certain features may not be avail-
able if for example, the main() routine is not declared.
Next, use the [Open Declaration] feature to quickly find symbol declarations:
1. If not already open, open the Interrupts.c document by double clicking Interrupts.c in the [Project Explorer].
2. Right click on [ADC0CN0_ADINT] to display the context menu.
3. Click [Open Declaration] to quickly navigate to the definition of ADC0CN0_ADINT.
4. Studio will automatically open SI_C8051F850_Defs.h and highlight the line containing the declaration of ADC0CN0_ADINT.
3
2
Simplicity IDE also supports code completion, a feature called Content Assist. The user can type the first few letters of a symbol or
include file and press [Ctrl+Space] to display a list of symbols that match the letters types.
Next, use Content Assist to display a list of symbols starting with the characters P1:
Once an MCU project builds, start a debug session. If a single debug adapter is available, the IDE will automatically download the code
to the MCU. If more than one debug adapter is available, the IDE will prompt the user to select a debugger. The Silicon Labs products
support non-intrusive, on-chip debug that provides hardware breakpoints, single stepping, and register/memory view.
Press the Resume button in the IDE. This will start the code running, and rotating the potentiometer will brighten and dim the P1.0 LED.
Use a breakpoint to halt the CPU just prior to executing the statement to read the ADC sample and update the PWM duty cycle:
1. Open Interrupts.c in the editor. If Interrupts.c is not shown in the tabbed list of files, then quickly switch to the Development
perspective and use the Project Explorer to open the Interrupts.c file. Next, switch back to the Debug perspective. The debug ses-
sion is still active when switching perspectives. Files shown in the editor will be visible in both the Development and Debug per-
spectives.
2. Scroll down to the following line in Interrupts.c: PCA0CPH0 = (uint8_t)(ADC0 >> 2);.
3. Move the mouse cursor to the left-hand margin of the editor in the highlighted blue region. Double-click the margin to add or re-
move a breakpoint at the corresponding source code line.
4. The core will halt on the breakpoint. Clicking the [Resume] button will run the CPU until the ADC conversion complete interrupt
fires again. Then the CPU will halt and all of the debug windows will update to reflect the new CPU state.
3 4
Use the Expressions view to display the current value of code expressions:
Use the Memory view to display the contents of the CODE, RAM, and XRAM memory:
3
5
4
6
1
7
2
4. Revision History
September, 2019
Updated formatting.
February, 2014
Initial revision.
Disclaimer
Silicon Labs intends to provide customers with the latest, accurate, and in-depth documentation of all peripherals and modules available for system and software implementers using or
intending to use the Silicon Labs products. Characterization data, available modules and peripherals, memory sizes and memory addresses refer to each specific device, and "Typical"
parameters provided can and do vary in different applications. Application examples described herein are for illustrative purposes only. Silicon Labs reserves the right to make changes
without further notice to the product information, specifications, and descriptions herein, and does not give warranties as to the accuracy or completeness of the included information.
Without prior notification, Silicon Labs may update product firmware during the manufacturing process for security or reliability reasons. Such changes will not alter the specifications or the
performance of the product. Silicon Labs shall have no liability for the consequences of use of the information supplied in this document. This document does not imply or expressly grant
any license to design or fabricate any integrated circuits. The products are not designed or authorized to be used within any FDA Class III devices, applications for which FDA premarket
approval is required or Life Support Systems without the specific written consent of Silicon Labs. A "Life Support System" is any product or system intended to support or sustain life and/or
health, which, if it fails, can be reasonably expected to result in significant personal injury or death. Silicon Labs products are not designed or authorized for military applications. Silicon
Labs products shall under no circumstances be used in weapons of mass destruction including (but not limited to) nuclear, biological or chemical weapons, or missiles capable of delivering
such weapons. Silicon Labs disclaims all express and implied warranties and shall not be responsible or liable for any injuries or damages related to use of a Silicon Labs product in such
unauthorized applications.
Trademark Information
Silicon Laboratories Inc.® , Silicon Laboratories®, Silicon Labs®, SiLabs® and the Silicon Labs logo®, Bluegiga®, Bluegiga Logo®, ClockBuilder®, CMEMS®, DSPLL®, EFM®,
EFM32®, EFR, Ember®, Energy Micro, Energy Micro logo and combinations thereof, "the world’s most energy friendly microcontrollers", Ember®, EZLink®, EZRadio®, EZRadioPRO®,
Gecko®, Gecko OS, Gecko OS Studio, ISOmodem®, Precision32®, ProSLIC®, Simplicity Studio®, SiPHY®, Telegesis, the Telegesis Logo®, USBXpress® , Zentri, the Zentri logo and Zentri
DMS, Z-Wave®, and others are trademarks or registered trademarks of Silicon Labs. ARM, CORTEX, Cortex-M3 and THUMB are trademarks or registered trademarks of ARM Holdings.
Keil is a registered trademark of ARM Limited. Wi-Fi is a registered trademark of the Wi-Fi Alliance. All other products or brand names mentioned herein are trademarks of their respective
holders.
Silicon Laboratories Inc.
400 West Cesar Chavez
Austin, TX 78701
USA
http://www.silabs.com