Почему-то не сбрасывается счётчик watchdog таймера командой IWDG_KR = 0xAA; в stm8s-discovery (смотрю на осциллограф, а там постоянно возникает ресет)... Вот код программы (в IAR 1.40.1 оптимизация кода низкая): 
 
#include <iostm8S105c6.h>
#include <intrinsics.h>
//--------------------------------------------------------------------------------
//
//  Setup the system clock to run at 16MHz using the internal oscillator.
//
void InitialiseSystemClock()
{
    CLK_ICKR = 0;                       //  Reset the Internal Clock Register.
    CLK_ICKR_HSIEN = 1;                 //  Enable the HSI.
    CLK_ECKR = 0;                       //  Disable the external clock.
    while (CLK_ICKR_HSIRDY == 0);       //  Wait for the HSI to be ready for use.
    CLK_CKDIVR = 0;                     //  Ensure the clocks are running at full speed.
    CLK_PCKENR1 = 0xFF;                 //  Enable all peripheral clocks.
    CLK_PCKENR2 = 0xFF;                 //  
    CLK_CCOR = 0;                       //  Turn off CCO.
    CLK_HSITRIMR = 0;                   //  Turn off any HSIU trimming.
    CLK_SWIMCCR = 0;                    //  Set SWIM to run at clock / 2.
    CLK_SWR = 0xe1;                     //  Use HSI as the clock source.
    CLK_SWCR = 0;                       //  Reset the clock switch control register.
    CLK_SWCR_SWEN = 1;                  //  Enable switching.
    while (CLK_SWCR_SWBSY != 0);        //  Pause while the clock switch is busy.
}
void InitialisePorts()
{
    PD_ODR = 0;             //  All pins are turned off.
    PD_DDR = 0xff;          //  All pins are outputs.
    PD_CR1 = 0xff;          //  Push-Pull outputs.
    PD_CR2 = 0xff;          //  Output speeds up to 10 MHz.
}
void InitialiseIWDT()
{
  IWDG_KR = 0xCC; // key_enable IWDG (Watchdog Timer)
  IWDG_KR = 0x55; // key_access to IWDG_PR and IWDG_RLR (config prescaler)
  IWDG_PR = 0;
  IWDG_RLR = 0x0;
}
int main()
{
    InitialiseSystemClock();
    InitialisePorts();
    PD_ODR_ODR2 = 1;
    __no_operation();
    __no_operation();
    __no_operation();
    __no_operation();
    PD_ODR_ODR2 = 0;
    InitialiseIWDT();
    volatile int counter;
    while (1)
    {
       IWDG_KR = 0xAA; // refresh value of Watchdog counter
       counter++;
    }
}
- 
	
- 0. IWDG_RLR = 0x0 - как-то стремно. Может лучче 0xFF?  lightelf(107 знак., 17.07.2014 15:38)
			
- Конечно же 0.! Вот я дубина! Очевидные вещи! :) Спасибо огромное! - Механик08(17.07.2014 15:50)
 
 
 - 0. IWDG_RLR = 0x0 - как-то стремно. Может лучче 0xFF?  lightelf(107 знак., 17.07.2014 15:38)