"トリミング値を格納可能なトリミングレジスタと、上記トリミングレジスタ内のトリミング値に応じて発振周波数が変更される発振器と、上記発振器の発振周波数を補正可能な補正回路と、を含み、上記補正回路は、周波数トリミングについての上限値を設定可能な上限値レジスタと、周波数トリミングについての下限値を設定可能な下限値レジスタと、上記発振器の発振周波数を分周するための分周回路と、上記分周回路の出力をカウントするカウンタと、上記カウンタの出力を保持可能なバッファレジスタと、上記バッファレジスタの保持値が、上記上限値レジスタの保持値と上記下限値レジスタの保持値との間に入っているか否かを判別するための比較器と、上記比較器での判別結果に基づいて上記トリミングレジスタのトリミング値を補正するトリミング値補正制御回路と、を含んで成る半導体装置。上記半導体装置は、上記発振器の発振周波数のトリミング値を保持する不揮発性メモリを含み、パワーオンリセット処理により、上記不揮発性メモリの保持値が上記トリミングレジスタに書き込まれる請求項1記載の半導体装置。上記トリミング値補正回路によって上記トリミングレジスタのトリミング値が補正された場合に、当該補正後のトリミング値によって、上記不揮発性メモリ内のトリミング値が更新される請求項2記載の半導体装置。本願発明者は、半導体装置の一例とされるマイクロコンピュータの内蔵発振器について検討し、以下の課題を見いだした。内蔵発振器の周波数は温度依存性があり、広範囲の温度で高精度な周波数を保つためには、常時周波数トリミングを行うことで周波数を補正する必要がある。しかも、内蔵発振器の発振周波数やその変動の許容範囲は、マイクロコンピュータが搭載されるシステムによって異なる。特許文献1,2によれば、発振周波数の補正は可能であるが、発振周波数変動の許容範囲を任意に設定することができない。例えばマイクロコンピュータに内蔵される発振器の発振周波数を40MHz±1.0保証をユーザが望んでいるにもかかわらず、そのような設定をユーザ自身がマイクロコンピュータに対して行うことができない。本発明の目的は、内蔵発振器における発振周波数変動の許容範囲を任意に設定可能な半導体装置を提供することにある。本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。すなわち、半導体装置は、トリミング値を格納可能なトリミングレジスタと、上記トリミングレジスタ内のトリミング値に応じて発振周波数が変更される発振器と、上記発振器の発振周波数を補正可能な補正回路とを含む。このとき上記補正回路は、周波数トリミングについての上限値を設定可能な上限値レジスタと、周波数トリミングについての下限値を設定可能な下限値レジスタと、上記発振器の発振周波数を分周するための分周回路と、上記分周回路の出力をカウントするカウンタとを含む。さらに上記補正回路は、上記カウンタの出力を保持可能なバッファレジスタと、上記バッファレジスタの保持値が、上記上限値レジスタの保持値と上記下限値レジスタの保持値との間に入っているか否かを判別するための比較器と、上記比較器での判別結果に基づいて上記トリミングレジスタのトリミング値を補正するトリミング値補正制御回路とを含む。本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記のとおりである。すなわち、内蔵発振器における発振周波数変動の許容範囲を任意に設定可能な半導体装置を提供することができる。1.実施の形態の概要先ず、本願において開示される発明の代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。1本発明の代表的な実施の形態に係る半導体装置21は、トリミング値を格納可能なトリミングレジスタ11と、上記トリミングレジスタ内のトリミング値に応じて発振周波数が変更される発振器12と、上記発振器の発振周波数を補正可能な補正回路20とを含む。上記補正回路は、周波数トリミングについての上限値を設定可能な上限値レジスタ6と、周波数トリミングについての下限値を設定可能な下限値レジスタ7と、上記発振器の発振周波数を分周するための分周回路13と、上記分周回路の出力をカウントするカウンタ3とを含む。さらに上記補正回路は、上記カウンタの出力を保持可能なバッファレジスタ4と、上記バッファレジスタの保持値が、上記上限値レジスタの保持値と上記下限値レジスタの保持値との間に入っているか否かを判別するための比較器5と、上記比較器での判別結果に基づいて上記トリミングレジスタのトリミング値を補正するトリミング値補正制御回路8とを含む。上記の構成によれば、上限値及び下限値の設定後は、トリミング値補正制御回路8によってトリミング値が補正されるため、発信周波数の安定化を図ることができる。半導体装置のユーザは、用途に応じて、発振器における発振周波数変動の許容範囲を任意に設定することができる。また、この設定は、上限値と下限値とをそれぞれ上限値レジスタ及び下限値レジスタに設定するだけで良いので容易である。2上記1における半導体装置は、上記発振器の発振周波数のトリミング値を保持する不揮発性メモリ18,19を含み、パワーオンリセット処理において、上記不揮発性メモリの保持値が上記トリミングレジスタに書き込まれるように構成することができる。3上記2において、上記トリミング値補正回路によって上記トリミングレジスタのトリミング値が補正された場合に、当該補正後のトリミング値によって、不揮発性メモリ19内のトリミング値が更新されるように構成することができる。これにより、パワーオンリセット処理後の上記トリミングレジスタの初期値は、前回の電源遮断直前のトリミング値となるので、半導体装置に電源が投入されてから発振周波数が安定するまでの時間短縮を図ることができる。2.実施の形態の詳細実施の形態について更に詳述する。《実施の形態1》図1には、本発明にかかる半導体装置の一例とされるマイクロコンピュータの構成例が示される。図1に示されるマイクロコンピュータ21は、特に制限されないが、公知の半導体集積回路製造技術により、単結晶シリコンなどの一つの半導体基板に形成される。図1に示されるマイクロコンピュータ21は、OCO周波数トリミングレジスタ11、OCOOnChipOscillator;内蔵発振器12、SUBクロック発振器14、CPUCentralProcessingUnit16、RAMRandomAccessMemory17、ROMReadOnlyMemory18、OCO周波数自動補正回路20を含む。OCO周波数トリミングレジスタ11、CPU16、RAM17、ROM18、OCO周波数自動補正回路20は、内部データバス15を介して、互いに信号のやり取りが可能に結合されている。OCO周波数トリミングレジスタ11は、OCO周波数のトリミング値を保持する。OCO12は、OCO周波数トリミングレジスタ11内のトリミング値に応じて発振周波数が変更される発振器とされる。SUBクロック発振器14は、32kHzのSUBクロック基準クロックを生成する。この32kHzのSUBクロックは、マイクロコンピュータ21に外付けされた水晶振動子によって形成されるため、周波数が安定している。このSUBクロック発振器14で発生されたSUBクロック信号は、OCO周波数自動補正回路20に供給される。CPU16は予め設定されたプログラムを実行することにより所定の演算処理を実行する。RAM17は、CPU16での演算処理の作業領域などに利用される。ROM18は不揮発性メモリであり、このROM18には、CPU16で実行されるプログラムや、OCOトリミングレジスタ値が格納されている。ROM18内のOCOトリミングレジスタ値は、マイクロコンピュータ21の工場出荷前に書き込まれたものである。ROM18内のOCOトリミングレジスタ値は、CPU16で実行されるパワーオンリセット処理によってOCO周波数トリミングレジスタ11にその初期値として設定される。OCO周波数自動補正回路20は、特に制限されないが、SUBクロック分周回路1、エッジ選択回路2、カウンタ3、バッファレジスタ4、比較器5、上限値レジスタ6、下限値レジスタ7、トリミング値補正制御回路8、フラグステータスレジスタ9、トリミング値補正コントロールレジスタ10、OCO分周回路13を含む。SUBクロック分周回路1は、SUBクロック発振器14から出力されたSUBクロック信号を分周する。SUBクロック信号の周期をφとするとき、SUBクロック分周回路1の分周出力は、例えばφ,φ/32,φ/128,φ/1024,φ/8192とされる。エッジ選択回路2は、SUBクロック分周回路1の出力に基づいて、カウンタ3でのカウント動作を制御するための測定用クロック信号SCKを形成する。測定用クロック信号SCKは、SUBクロック分周回路1の出力波形の立ち上がりエッジ、波形立ち下がりエッジ、波形立ち上がり立ち下がり両エッジの何れかに基づいて形成される。OCO分周回路13は、OCO12から出力されたOCOクロック信号を分周する。OCOクロック信号の周期をφとするとき、OCO分周回路13の分周出力は、例えばφ,φ/2,φ/4,φ/8,φ/40とされる。OCO分周回路13の分周出力は、マイクロコンピュータ21内の内部回路に供給される。カウンタ3は、クロック監視イネーブル信号CKNがイネーブル状態のとき、エッジ選択回路2によって形成された測定用クロック信号SCKに基づいて、OCO分周回路13の出力をカウントする。クロック監視イネーブル信号CKNは、CPU16で形成することができる。バッファレジスタ4は、カウンタ3のカウント値を保持する。カウント値がバッファレジスタ4に保持された時点でカウンタ3がクリアされ、次の測定が開始される。上限値レジスタ6は、周波数トリミングについての上限値を保持する。下限値レジスタ7は、周波数トリミングについての下限値を保持する。周波数トリミングについての上限値や下限値は、CPU16によって設定することができる。比較器5は、バッファレジスタ4の保持値が、上限値レジスタ6の保持値と下限値レジスタ7の保持値との間に入っているか否かを判別する。トリミング値補正制御回路8は、比較器5での判別結果に基づいて、OCO周波数トリミングレジスタ11内のトリミング値の補正を制御する。トリミング値補正制御回路8は、バッファレジスタ4の保持値が、上限値レジスタ6の保持値と下限値レジスタ7の保持値との間に入っている場合にはトリミング値の補正を行わない。トリミング値補正制御回路8は、バッファレジスタ4の保持値が、上限値レジスタ6の保持値より大きい場合、OCO周波数を下げるようにOCO周波数トリミングレジスタ11内のトリミング値を補正する。トリミング値補正制御回路8は、バッファレジスタ4の保持値が、下限値レジスタの保持値より小さい場合には、OCO周波数を上げるようにOCO周波数トリミングレジスタ11内のトリミング値を補正する。フラグステータスレジスタ9は、周波数正常フラグ、上限オーバーフラグの状態及び下限未達フラグの状態を保持する。バッファレジスタ4の保持値が、上限値レジスタ6の保持値より大きい場合、トリミング値補正制御回路8によって、フラグステータスレジスタ9内の上限オーバーフラグが立てられる。バッファレジスタ4の保持値が、下限値レジスタ7の保持値より小さい場合、トリミング値補正制御回路8によって、フラグステータスレジスタ9内の下限未達フラグが立てられる。CPU16は、内部データバス15を介して、上限オーバーフラグの状態や下限未達フラグの状態をモニタすることができる。トリミング値補正コントロールレジスタ10には、トリミング値補正コントロール信号命令が設定される。このトリミング値補正コントロール信号は、内部データバス15を介してCPU16によって設定される。トリミング値補正制御回路8の動作は、トリミング値補正コントロールレジスタ10に設定されたトリミング値補正コントロール信号によって制御される。次に、上記構成の動作について説明する。図2には、図1に示されるマイクロコンピュータ21における主要動作の流れが示される。また、図3及び図4には、図1に示されるマイクロコンピュータ21における主要部の動作タイミングが示される。本例では、40MHzについて、±1.0保証を行う場合について説明する。CPU16によって、上限値レジスタ6及び下限値レジスタ7の設定が行われる201。上限値及び下限値として、40MHz±0.75相当の値が格納される。±0.75としているのは、±1.0に対してマージンを持たせているためである。CPU16によって、クロック監視イネーブル信号CKNハイレベルに設定されると、カウンタ3でのカウント動作が開始される202。エッジ選択回路2によって測定用クロック信号SCKが形成される毎に、カウンタ3でのカウント値がバッファレジスタ4に保持され、それが比較器5において上限値及び下限値と比較される203~205。本例の場合、32kHzの基準クロックに基づいて40MHzクロックを測定することから、カウンタ3でのカウント数は、理想的には、1/32k÷1/40M≒1250とされる。また本例において、上限値は1260≒40.3MHzとされ、下限値は1240≒39.7MHzとされる。バッファレジスタ4の保持値が、上限値より大きくて、下限値よりも小さい場合206、不正状態とされ207、CPU16によるリセット又は所定の割り込み処理が行われる208。図4に示されるように、OCO12の発振周波数が下限値39.7MHz以下の場合、すなわち、バッファレジスタ4の保持値が、上限値より小さくて、下限値よりも小さい場合には209、トリミング値補正制御回路8によって下限未達フラグが立てられる210。それによりOCO12での発振周波数を上げるようにOCO周波数トリミングレジスタ11のトリミング値が補正され、それによってOCO周波数トリミングレジスタ11のトリミング用タップ切り換えが行われることで発振周波数が上げられる211。図3に示されるように、OCO12の発振周波数が上限値40.3MHz以上の場合、すなわち、バッファレジスタ4の保持値が、上限値より大きくて、下限値よりも大きい場合には212、トリミング値補正制御回路8によって、フラグステータスレジスタ9内の上限オーバーフラグが立てられる213。それによりOCO12での発振周波数を下げるようにOCO周波数トリミングレジスタ11のトリミング値が補正され、それによってOCO12におけるトリミング用タップ切り換えが行われることで発振周波数が低下される214。バッファレジスタ4の保持値が、上限値より小さくて、下限値よりも大きい場合215、トリミング値補正制御回路8によって周波数正常フラグが立てられる216。この場合、トリミング値補正は行われない。上記マイクロコンピュータ21は、自動車の制御装置や、家電製品の制御装置などに適用することができ、ユーザは、用途に応じて、内蔵発振器12における発振周波数変動の許容範囲を任意に設定することができる。また、この設定は、CPU16を介して上限値と下限値とをそれぞれ上限値レジスタ6及び下限値レジスタ7に設定するだけで良いので容易である。上限値及び下限値の設定後は、トリミング値補正制御回路8によってOCO周波数のトリミング値が補正されるため、OCO周波数の安定化を図ることができる。《実施の形態2》図5には、本発明にかかる半導体装置の一例とされるマイクロコンピュータの別の構成例が示される。図5に示されるマイクロコンピュータ21が、図1に示されるのと大きく相違するのは、ROM18に代えて、フラッシュメモリが設けられている点である。フラッシュメモリは、EEPROMElectricallyErasableProgrammableReadOnlyMemoryの一種であり、記憶情報の書換えが可能な不揮発性メモリとされる。このフラッシュメモリ19には、CPU16で実行されるプログラムや、OCOトリミングレジスタ値が格納されている。また本例では、OCO周波数トリミングレジスタ11のトリミング値がトリミング値補正制御回路8によって補正された場合に、OCO周波数トリミングレジスタ11内の補正後のトリミング値によって、フラッシュメモリ19内のトリミング値が更新される。この更新は、CPU16の制御によって行われる。そして、マイクロコンピュータ21の電源が遮断されても、フラッシュメモリ19には、電源遮断直前のOCO周波数トリミングレジスタ11内のトリミング値が保持されている。そして、次にマイクロコンピュータ21に電源が投入された場合には、CPU16で実行されるパワーオンリセット処理において、フラッシュメモリ19内のトリミング値がOCO周波数トリミングレジスタ11に書き込まれる。これにより、パワーオンリセット処理後のOCO周波数トリミングレジスタ11の初期値は、前回の電源遮断直前のトリミング値となる。このため、図1に示されるマイクロコンピュータ21のように、工場出荷前に設定されたトリミング値を初期値とする場合に比べて、電源が投入されてから発振周波数が安定するまでの時間短縮を図ることができる。以上、本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。"