Home

Renesas EDK2215 datasheet: pdf

image

Contents

1. Once you have built your code in HEW as detailed in the Quickstart guide the file lt projectname gt abs Is created e download the code on to the EDK Right Click on the download module and choose Download module from the pop up menu Download module Unload module Configure View Allow Docking Hide e To view the code double click on the source code file resetprg c in the project workspace window A window appears showing the C source code e Click on the ResetCPU button ET e The Program Counter will go to the program start address denoted by a yellow arrow 10 INITSCT 14 HardwareSetupi 19 9 9 1 Place a breakpoint next to the main function by double left clicking the mouse in the breakpoint column pragma section ResetPRG 1 Release entryiwvect l Zendif void Power H Reset vwoild 0 dt INITSCT 4 HardwareSetup a main Then press Debug Go This command will enable us to start running our code from main and will also have initialised the hardware To execute the first line of the program select Step in to step into the main function using one of the methods listed below There are three ways to step run through the tests 1 Step over for the next line and continue this process to step over the individual tests one at a time or 2 Step in to Step in to the individual tests 3 Go and the progra
2. configuration options provided to the user These are provided in the hmonserialconfiguser c file and the referenced hmonserialconfiguser h and hmonserialstruct h More information on this is provided later in the Tutorial Manual Certain files have different functionality depending on the build configuration These differences are covered in further detail within the chapters about these build configurations However an example is that the part of the program which in Release mode would output text to a serial teminal is excluded from the debug build with an ifdef statement because the debugger uses the serial port 5 DEBUG WITH HMON BUILD The Debug_with_HMON Build Configuration should look like the workspace below 8 07 EDK E a Assembly source file T fio vectors src B n source file PO in dbsct c HM NCanfialser c hmonseralconfiguser c l hwisetup c intera X maine resetprg c eA X sbrk c Eg Download modules 0 EDK_Tutorial abs H E Dependencies E edkdef h B hmonconfiguser h e B hmonconfiguserstract m hmonserialcontiguzer h B hmonseralstruct h te E hmsetypes h E iodefine h i E sbrk h E scih i stackscth In the Debug_with_HMON configuration the file SCI C is excluded This is because in debug mode HEW communicates with the monitor using the serial port The structure definition and assignment has already been done to m
3. 2e __interruptivect 35 void INT TGIUD TFPUU void i 10 TIHER_INT_FLAG amp SET_BIT_LOW O 6 TIMER COMPARE REGISTER COMPARE 3c 1 You should be able to see the LED flash with 50 duty e Run to the breakpoint using Run Go again You can see the duty value change and the corresponding flash period of the LED also change Note that when the program is stopped the duty value does not change even though the LED continues to flash and compare match occurs as the timer continues to run Although this does in fact cause an interrupt request HMON masks interrupts while the program is stopped e Remove the breakpoint and Go You cannot see the Timer register value decrement while the program is running however you can see the duty value of the LED flash change 6 1 RELEASE BUILD This tutorial includes the three tests from the debug tutorial Flashing LED Statics Test and Timer Test This tutorial shows how to run the code on the EDK without the debug monitor The aim of this example is to show that an application can be created using these tools which will be capable of running stand alone The majority of the work has already been done This example uses the same source files that were used in the Debug Tutorial The main difference is that since HMON will not be resident a real power on reset vector must be created and not one that calls HMON initialisation function Since HMON is no longer using
4. A nta nnd tof 10 RELEASE BUILD 15 VECTOR TABLE a a a duct fao Ro 15 LOW EEVEDINITIABISATION sine 16 THESERIALIOFUNCION cR 16 EINKING FORSTANDALONE rara 17 RUNNING THE COP 17 GLOSSARY OF TERMS HEW Hitachi Embedded Workshop CCR Condition Code Register EXR EXtended control Register SR Status Register ISR Interrupt Service Routine PWM Pulse Width Modulation CPU Central Processing Unit PC Program Counter IRQ Interrupt ReQuest NMI Non Maskable Interrupt RTE ReTurn from Exception LED Light Emitting Diode INTRODUCTION This manual is designed to answer in tutorial form the most common questions asked about using an Evaluation Development Kit The tutorials help explain the following e compile link download and run a simple program on the EDK e How dol build an embedded application How do use Hitachi s tools The project generator will create a tutorial project with two selectable build configurations e Debug_with_HMON is a project built with the Hitachi Configurable monitor HMON e Release build demonstrating use without the embedded Monitor Files referred to in this manual are installed using the project generator as you work through the tutorials The tutorial examples in this manual assume that installation procedures described in the EDK Quickstart Guide have been completed Please refer to the quickstart guide for details of downloading the Hitachi Debugging Monit
5. EDK GENERIC TUTORIAL MANUAL FOR HITACHI ON CHIP FLASH MICROCONTROLLERS Cautions 1 This document may be wholly or partially subject to change without notice 2 All rights reserved No one is permitted to reproduce or duplicate in any form a part or this entire document without Hitachi Micro Systems Europe Limited s written permission Trademarks General All brand or product names used in this manual are trademarks or registered trademarks of their respective companies or organisations Specific Microsoft MS and MS DOS are registered trademarks and Windows and Windows NT are trademarks of Microsoft Corporation Document Information Product Code 0003959 11 Version 4 Date 28 10 2002 Copyright Hitachi Micro Systems Europe Ltd 1995 2002 All rights reserved Global http www hitachisemiconductor com http www hmse com xe QD 92 9 9 5 4 9 9 6 1 6 2 6 3 6 4 6 5 TABLE OF CONTENTS TABLE OF CONTENTS albania lana aa 3 GEOSSARYOP TERMS contenus cai 4 INTRODUCTION ida WE ORE DOT IC 9 TUTORIAL PROJECT WORKSPACE lai 6 DEBUG WITH HNION Fo atl c v RU ce ouk ix RUE ECL EXER CU A du X RE MIRROR RE E P ERA dk 7 CREATING A NEWPROJEGTWORK SPACE iaia 8 INTERRUPPE Licia 8 WHAT TRE STARTUP CODE DOES Sees Teun ats eat cual edi du ra 9 BUILDING CODE amp PROGRAMMING 10 RUNNING THE DEBUG TUTORA dat end n e
6. When downloading is complete choose disconnect E RUNNING THE CODE To verify that the tutorial is working as expected e Start a terminal emulation program such as HyperTerminal e Connect to the EDK with the correct protocol settings set in the Release tutorial the structure struct SCI Init Params SCI Init Data B115200 P _NONE 1 8 in this example 115200 baud 8 bit no parity 1 stop Please refer to your serial port comms definition file for specific settings e On pressing the reset button the EDK will enter user mode and a test menu should appear on your hyperterminal screen This allows you to select between the 3 individual tests 1 Flashing LED Test 2 Statics Test 3 Timer Test Choose an option and view test running the EDK The Flashing LED will flash one LED On Off for few seconds The Statics test will output a string of characters and the Timer test will flash the other LED
7. aining four variables set in SCI_Init_Data struct SCI_Init_Params unsigned char Baud Baud Rate Register Value unsigned char Parity Parity P NONE P EVEN P ODD 6 4 6 5 unsigned char Stops Number of stop bits 1 2 unsigned char Length Length of byte transmitted 7 8 struct SCI_Init_Params SCI_Init_Data B115200 NONE 1 8 B115200 is a macro defining the BRR register value to set the serial port speed to 115200 bits per second LINKING FOR STANDALONE CODE Now we need to program the absolute file into the Flash memory we want an S Record format output rather than a Elf Dwarf debug file the build process includes a final build phase that creates a mot s record file from the abs file Also debug information is of no use to us by default the output format for the Release build configuration is to not include debug information in the output file e You can inspect these options in the Output options of the Linker dialog Assembly standard Lia CPU Category Bu Datarecordhesde None None z Press the BOOT button on the EDK to place the EDK into Boot mode Hj Select Boot from the HMON FLASH Download Settings button 7 Click on the Download Device Image and browse to the Configuration Directory Download File to Flash Memory Ki Ei hu Select the Release mot file and Open This will download the file to the EDK
8. ake it easy to access the on chip peripheral control registers for all the device s peripheral registers The code for this is in a header file called iodefine h This file is created when you generate a new project in HEW So for this tutorial example all we have to do is include the header file in our C file include iodefine h register definition header file With this file included any structure or assignment declared can be used in our C program Note that each separate C file that uses any of these definitions must include the header file in it Please refer to the main c and hwsetup c source files for the function HardwareSetup for specific on chip peripheral settings etc 5 1 CREATING A NEW PROJECT WORKSPACE To look at the program start Hitachi Embedded Workshop from the Windows Start Menu or from its icon 4 e Open a new tutorial workspace from the File New Workspace menu select Create a new project workspace if you are presented with the Welcome dialog New Project Workspace Ei Workspace EDK EDK woke e i c H85 H8 300 Hitachi H85 H8 300 Standard c E Application E Assembly Application A A VOI TENE Demonstration HU TS Empty Application Enter a name for the workspace EDK_Tutorial e The project name field will be pre filled to match the workspace
9. and in the Watch window you will see that the contents of the variable ucStr is overwritten with the data abcdefghijk Mame Value Type Eo UCSh 1 Ox00ffc420 unsigned 1 31 The address shown above may differ on your EDK however the string value will match TIMER PERIPHERAL The microcontroller contains a lot more than simply a CPU A whole host of peripherals are available to you for use in a target application Each peripheral module has a set of control and status registers which act as the interface to the CPU Many peripherals also have pins associated with them which act as the interface to the outside world Each peripheral can signal a change in its status by setting bits in one of its registers or by sending an interrupt to the CPU prompting immediate action The control and status registers of the peripheral modules are memory mapped each one having a unique address at the top of the address space Registers vary in type from byte wide to long word wide and from read write to read or write only To allow simple access to the registers the flexible casting feature of C may be used In this tutorial a symbol can be defined which corresponds to the access inside the address of the given register This requires the address which is a constant integer value to be treated as an address reference i e a pointer and then pointer indirection to be used to access the contents of the address To further co
10. causes an interrupt to occur whenever the value in the TCNT register matches that in the TGRB register The special function set imask 0 or set imask ccr 0 or set imask exr 0 is added this is an in line function to insert an instruction to unmask the interrupts This allows HMON to utilise the interrupts while stepping the code In order to use this special function we have to include the header file machine h This contains a number of functions definitions to allow access to CPU operations like accessing the CCR SR and using specific instructions e g sleep movfpe eepmov mac rotlw dsub nop These functions may be used in an application to gain access to the CPU they should be used with care as they directly control the underlying hardware and are not subject to checking by the compiler RUNNING THE TIMER Open a code window with the main function and set a breakpoint at the start of the timer function ifdet Debug 14 Flashing LED J Statica Testi 6 Timer Test whiletrij fendit Press Go or Go Reset and the program should stop at the breakpoint This instruction will have set up the registers for the Timer peripheral to the necessary values for running the timer Next use Debug Step In This will step into the timer function Set a breakpoint the interrupt routine where the duty cycle is changed and Go to the breakpoint The line should look like this
11. e static compiler directive before its declaration By default the sections have the following names ANSI C Section Hitachi Compiler Linker section name Program Constants Pp Dmm 0o Vi 0 LI The un initialised unsigned integer ui Count is in section B RAM and is initialised to zero by _INITSCT The code in _INITSCT copies the initial value of ucStr in ROM to RAM The initial value is in section D ROM and is copied to R RAM this can be seen in the Link Library tab of the Options Toolchain menu in HEW Select Output from the top drop down list and Show entries ROM to RAM mapped sections This is referenced in the source file dbsct c VIEWING VARIABLES To view the variable ucStr open a watch window View Watch within HEW Place the cursor in the Watch window then use the right mouse button and click Add watch Enter ucStr as the name of the variable in the field and click OK The variable will be added to the watch window Another method of adding a watch is to right click on the variable in question and choose instant watch This opens up an instant watch window Clicking Add adds the variable to the watch window The watch window shows that before the statics test ucStr has the value hello world Hame E ucStr unsigned char 13 hello world OxO0ffc420 9 9 4 9 9 9 Step In repeatedly
12. he Linker Settings The User Vectors section is a pointer to a location pointing to the start address of the tutorial code Its location in the linker section corresponds to the pre defined value in the file resetprg c This pointer location is fixed in the HMON library and must not be changed Review the debug build linker sections to determine its value The pointer allows the monitor to set the PC to the address in memory of the start of the program code when either Reset CPU st and Run Go Reset 15 pressed The operations performed by the startup code are e Unmask all interrupts e Set the stack pointer to a valid address e Set the initialised static variables to the correct values e Setall other static variables to 0 see statics text for details e the hardware initialisation code e the main routine Finally the PowerON Reset function ends with a sleep intrinsic function call to put the microcontroller into a safe state and avoid code run away BUILDING CODE amp PROGRAMMING THE FLASH Now armed with the knowledge of what is happening in the background the Debug_with_HMON project will need to be flashed into the microcontroller on the EDK to allow you to debug code Until this file is flashed onto the microcontroller no debug can be performed Please refer to the Quickstart guide for details of programming the EDK with the Debug Project containing the HMON monitor RUNNING THE DEBUG TUTORIAL
13. inated using an RTE instruction However this is not the only difference ISRs are by nature asynchronous and thus you cannot rely on the state of the registers on entry to the function In addition the ISR must preserve the state of all registers as there is no way of telling which registers were currently in use by the CPU when the exception occurred You also need to create an entry in the vector table that gives the address of the ISR for the given interrupt Each vector is located at a fixed address so care must be taken to place it correctly To define a function as an ISR simply precede it by either of the following forms of statement pragma interrupt Interrupt function declaration interrupt vect x Where x is the vector number of the interrupt you wish to reference This instructs the compiler to treat the function as an ISR and hence to preserve the register values and to terminate with an RTE instruction When the interrupt occurs the corresponding ISR function address is fetched from the vector table and the program will jump to that address Therefore the address of the specific ISR needs to be stored in the correct place in the vector table When you create a new project in HEW the file defining the vector table and ISRs is intprg c intprg c contains default ISR functions for all interrupts Those used by HMON are excluded from the Debug with HMON build using Zifdef statements The interrupt used by the tutorial code is def
14. ined and contained at the bottom of the main c file and commented out of intprg c HMON AND USER INTERRUPTS When using HMON to debug code certain interrupts are reserved for use by the Monitor These are the TRAP INTERRUPTS the PC BREAK when available and those for the serial port used to connect to HEW The vectors for these are provided in vectors src Refer the HMON User Manual this details the interrupts used by HMON and user considerations to ensure correct operation WHAT THE STARTUP CODE DOES The start up code will perform initialisation depending on the device used on your EDK The start up routine differs between SH H8 and 85 devices Review the startup source code before reading the next sections The initialisation process can be viewed in the PowerON Reset function in the project file resetprg c This functon is declared as the entry point of the system using the entry this tells the compiler to insert assembly code at the beginning of the function to set up the stack pointer using the section name S and the stack size stored in stacksct h The microcontroller reset vector Vector 0 is used by HMON This allows HMON to start first and initialise from power on reset When using the Release build configuration the entry point is defined in resetprg c 5 4 5 5 The Run Reset st and Run Go Reset functionality is determined by configuring the monitor code and the User Vectors section in t
15. l port is now available NNNM Category Source Show entries for Release The HMON library has been removed from the Input of the Ey Assembly Link Library Stand E linker on Category Show entries for D If you examine the linker section settings you ll see that the Address Section HMON specific sections have been removed 0 00000400 PResetPAG PIntPRG Note the section addresses may be different from those shown a aqqqaggg P DSEC for your C BSEC OxU0FFCOOO 5 LOW LEVEL INITIALISATION As we saw in the debug tutorial low level initialisation occurs before the user s code is called in order to set up the CPU and essential peripherals Since we are running standalone we do not use HMON to initialise the EDK environment for us Therefore we must do it ourselves in HardwareSetup THE SERIAL I O FUNCTIONS SCl c and SCI h are the files containing the four serial functions shown in the table below InitSCl Unsigned char UINT8 Struct Initialises serial port using data in structure and returns error flags GetChar Unsigned char UINT8 Void Returns a character received by SCI SCL Init Params PutChar Unsigned char Transmits a character PutStr Void Unsigned char Transmits string of characters null terminated This is example code for control of the SCI port The initialisation function takes a structure cont
16. ly allocated i e build at a time space Static variables may be of any valid type and may or may not be given an initial value In an embedded system the code is resident in some form of non volatile memory ROM Flash and the application must boot from an uninitialised state at power up In such systems the static data must be set to its initial value before the user s application code is called i e before the main executes In addition it is common for the applications data area to be located in some form of memory which requires the system hardware to be initialised before it can be accessed e g RAM These systems require startup code to perform the initialisation from reset and then to pass execution to the user code The information on how to initialise the static areas must be stored in non volatile memory i e ROM so that the startup code knows what to do However the most desirable situation is one where the user can happily forget about the startup because initialisation information is automatically created and referenced using the compiler build tools This is the goal of the Statics test within the Debug_with_HMON tutorial to demonstrate that this code has indeed worked This test must be run under HMON to verify the results The character string ucStr is defined as a global variable with an initial value of hello world Global variables are static by definition however variables can use static memory allocation by using th
17. m will run from where the PC is currently until it meets a breakpoint Function Menu Command Accelerator Toolbar Button m Step in Debug Step in F11 Step over Debug Step over F10 UM Step out Debug Step out Shift F11 Go Debug Go F5 1 LED TEST This test code allows the user to flash ON OFF the on board LED while stepping through the code within HDI Set a breakpoint at the line where the state of the LED port pin data register bit is toggled as shown 6 ftor ulLEDcount 0 ulLEDcount 20 ulLEDcount 1 f forfulled Delay l0 ulLed Delay lt 400000 ulLed Delay 54 LED PORT DR LED XOR the value 1 30 void Statics Test vold Takes Initialsed data and Choose Run to run to the breakpoint Choosing Go again will toggle the state of the LED Go again a couple more times to observe the LED change state then double click the breakpoint to remove it Place a breakpoint at the call for the next function in Main the Statics Test and press Go 5 5 2 5 5 3 itdet HHON Debug 34 Flashing LED 56 Statica Testi 56 Timer_Test 1 whilerl fendit The LED should flash the remaining number of times left in the FOR loop and stop at the breakpoint STATICS TEST Most C applications will have a certain number of variables which are of either global or module scope These variables are referred to as static as they require statical
18. matches the value in the TGRA register the TCNT register will be reset to zero causing the cycle to reset and the output of the pin to be cleared turning the LED off TGRA TGRB Timer Pin O P The function HardwareSetup sets up the control registers in the timer module In order for it to be called we must ensure the function is called at the start of resetprg c main calls the timer test function in which the duty cycle register is set up and the timer started The timer interrupt function is the interrupt service routine used when the timer compare match occurs The first line clears the timer s compare match interrupt bit if the interrupt is not cleared another interrupt will immediately be generated on return from ISR The second line in the ISR decrements the duty value in the TGRB compare register to shorten the off time of the LED when it is decremented past 0 the value in the register will underflow and start again at a high value i e with a 13 5 5 6 short pulse on the LED Note that we decrement the value rather than increment it because if we incremented then very shortly after returning from the interrupt we would get a compare match on this larger value as the timer is still counting rather than waiting until another complete cycle period has been completed The startup function HardwareSetup in hwsetup c has code to enable the Timer module compare match interrupt TIMER TCR SETUP TCR This
19. mplicate matters the entire construct must be declared as volatile to stop compiler from optimising away accesses to the register This is because the registers may be modified by some operation other than one performed by the CPU and thus the compiler can have no visibility of this Optimising compilers often remove accesses to what appears to be redundant information this must be stopped in the case of peripheral control and status registers hence the use of the volatile keyword TIMER CODE The Timer program is designed to flash an LED on the EDK using one of the on chip timer modules instead of software The timer is used to output a PWM square wave signal on the timer output that is multiplexed with a port pin on the microcontroller to which one of the LEDs on the EDK is connected The port and the timer output both share this pin but cannot share it at the same time The cycle period for the waveform is set by the value in one of the timer s Timer General Registers TGRx and the duty cycle is set by the value in another TGRx register using an Interrupt Service Routine We will assume TGRA for the cycle period and TGRB for the duty cycle When the timer is enabled the timer will start counting up When the value in the timer count TCNT register matches the value in the TGRB register the output of the pin will go to 1 turning the LED on and the counter will continue to increment When the value in the TCNT register
20. name above you may change this name e Select the CPU family and Toolchain for the EDK e Select the EDK Project type for your EDK Click OK to start the EDK Project Generator wizard e Select Tutorial as the type of project to generate and then click Next e Click Finish to create the project The project generator wizard will display a confirmation dialog Press OK to create the project and insert the necessary files You will see a tree display showing all the files in this project e To view the file main c double click on the file in the Workspace window new window will open showing the code 5 2 INTERRUPTS Interrupts are used within the tutorial General usage and the interaction with HMON is explained in the following sections It is advisable that this section is read in detail to ensure any future Project Workspaces created by the user are sufficient for use with HMON additionally the HMON User manual should be referred to for implementation details 9 2 1 9 2 2 9 2 3 5 3 INTERRUPT OVERVIEW In most user applications the rapid response of the system to external stimuli is essential in such systems the CPU must be informed of the change in the system status immediately To rely on polled tests of the various peripheral control registers represents a large CPU overhead Hitachi microcontrollers support a wide range of on chip peripherals each being capable of generating at least one CPU interrup
21. or to the board The source code referred to in this manual is for example purposes only Due to software revisions the code may not accurately reflect the supplied code Tutorials are for Hitachi toolchains only NOTE These tutorials are designed to show you how to use the EDK and are not intended as a comprehensive introduction to HMON Hitachi Embedded Workshop HEW or the compiler toolchains please consult the relevant user manuals for more in depth information TUTORIAL PROJECT WORKSPACE The workspace includes all of the files for both of the build configurations The tutorial code is common to both the Debug_with_HMON and the Release build configurations The workspace is designed to show how code can be written debugged then downloaded without the debug monitor in a Release situation The build configuration menu in HEW allows the project to be configured such that certain files may be excluded from each of the build configurations This allows the inclusion of the debug monitor within the debug build and it s exclusion in the Release build Contents of common C files are controlled with the defines set up in the build configurations and ifdef statements within the files Maintaining only one set of project files means that projects are more controllable The HMON Monitor code is provided in a pre compiled library for inclusion in the users code This library bust be included in the tool chain linker settings There are some
22. t In addition the CPU may be signalled from external devices using the NMI or one of the IRQ interrupt signals In the debug tutorial the compare match interrupt of the PWM Timer is used to vary the duty cycle of the flashing LED Microcontroller architectures provide direct hardware support for interrupts via the interrupt controller Each interrupt source is allocated a special vector address The vector address is used to store the address of the interrupt service routine ISR which is to be executed when the relevant interrupt is accepted The interrupt controller tests the priority level of an incoming interrupt against the priority level that the CPU will currently accept If the incoming interrupt is higher than the current CPU mask interrupt mask level then interrupt processing begins The program counter PC and the CCR EXR SR are stacked processor dependant and the PC set to the value contained in the relevant vector address Execution then continues from the new PC value The ISR should be terminated with a return from exception RTE instruction to ensure that the PC and the status condition are correctly restored on exit CREATION OF AN ISR IN C It is often desirable to write all your application code in C where possible The Hitachi tools support extensions to the ANSI language to allow interrupt service routines ISR to be written As mentioned above an ISR is distinguished from a normal function by the fact that it is term
23. the UART serial interface this is now available to our application hence in this build the source code for the serial port is included This is now used to output a test menu to an external terminal application This allows the user to select between the tests which run individually VECTOR TABLE WITHOUT HMON Change the session menu from SessionH8S_2000_HMON to DefaultSession Debug with DefaultSession When prompted to save the session choose Yes Embedded UD Now change the build configuration from HMON Debug to Release Release DefaultS5eszion The project workspace now shows the HMON files excluded and the serial port functions included Eg EDK E 3 Assembly source MEZ ix vectors src Sie C source file 0 f dbscto i HMONConfigUser c e Fy hmonseralconfiguser hwizelup c Intprg c sbrk c f SCL DI E Download modules 5 EDK Tutorial abs B I Dependencies edkdet h N hmoncanfiguser h Bes hmonconfiguserstruct h Res hmonserialconfiguser h Res hmonseralstruct h e hmsetypes h iodefine h sbrk h zci h stacksct h 6 2 6 3 The Release configuration replaces the define for the debug DADA SANI build The project build now includes the code contained the Assembly E fifdef Release statements as the seria

Download Pdf Manuals

image

Related Search

Related Contents

CC1110DK/CC2430DK/CC2510DK Development Kit User Manual  DeLOCK 46240  Diagnosis TB3700  Westinghouse 120Hz User Guide  Gentle Temp 510  Samsung CLP-350N Benutzerhandbuch  ri004  4-speed N1 Instructons  Istruzioni per l`uso  User Manual - kodakpixpro.com  

Copyright © All rights reserved.
Failed to retrieve file