C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5858|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
  m, b5 ~; ?( Y1 {) Fmain文件:
5 J3 q, F, ]+ C+ ointerrupt void interrupt4(void)  - _7 e, f, q% C, ~
{
2 e3 X% u! [  W* f* M0 y8 `  Uint32 sample;
5 d# Z- a# r1 r5 s3 |; }1 Z$ ?/ g8 |
1 t- [7 `& g) h5 X/ B  K. x% V& n/ S  sample = input_sample(); // read L + R samples from ADC
# x, K* q, [; L, r- @; Z, s1 s; I' n  output_sample(sample);   // write L + R samples to DAC # n  `. l" ~1 q3 `  M
  return;
. v' N8 |' Z3 @$ n0 {8 {}
4 |, z7 q; `" N5 b4 V4 {6 X! r. d6 m2 y9 }
int main( void )1 S* r  J  A$ I5 J3 ]. O; X0 k6 N
{4 f8 A, E$ M& \0 p* {

9 U9 \; p+ w# |    /* Initialize BSL */
7 G' J8 x! ~* h' L    EVMC6747_init( );
8 e6 a* H  L0 F8 ~4 O6 |        /* Call evmc6747_intr function */" e# J  v! g6 {3 p5 {, j1 |
    aic3106_init( );
1 T2 W5 V2 E. c- k7 t        while(1);+ z' i4 e# ^* N2 V/ P
}
2 `& r( u2 S: D. q( q1 Z- S2 l; }' F/ _4 K& t( `

1 e# Q9 r1 ~, d0 C- m3 {aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
. ^9 _9 s6 a3 z7 b! X/* Initialize MCASP1 */
; n) h: i2 K5 v! w0 A; a    mcasp = &MCASP_MODULE_1;
! Y) u- W9 D& e$ Y# [9 P    mcasp->regs->GBLCTL  = 0;       // Reset
# }4 [4 @. x- ]/ W' b6 F; ~0 j- t    mcasp->regs->RGBLCTL = 0;       // Reset RX
* ]( Q# N' Q9 c: I+ p6 q; n    mcasp->regs->XGBLCTL = 0;       // Reset TX4 t( j/ V0 E1 }7 [$ W& h
    mcasp->regs->PWRDEMU = 1;       // Free-running. J- @9 X# k( s6 c8 w
   // configure McASP0 receive registers# A% h2 `! c7 h5 \6 @% s2 p
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
) l8 N4 z3 S* N) s. e! C    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! `, h9 c, n) P4 m
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
4 ]- q7 B7 h& n0 t/ I+ ^# ]    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)+ M) f6 f' u6 ]" R! O& D' m4 L
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
0 N' T& Q. z5 {  x0 z0 E9 B7 J/ I* X  k    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
9 {* }! }* J* L7 C* [# O1 t, v( i& F    mcasp->regs->RINTCTL    = 0x00000000; // Not used& o. V, Z3 _  z+ p* c$ [6 {1 w
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 K$ v+ T4 `) l& j6 \  `( M

% ~$ K% T0 Z' D( q0 T* \4 Q4 O    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used& W* H$ h+ r8 w8 X, m' ^- Z
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ F; W; e% {3 m- `  L% q6 v( h
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
4 t" g# K9 o% Z; O5 P    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
! b3 m) S7 C* U8 i1 e    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK. M% s4 T& c. c( B& H
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
- _4 {- w9 w7 w. B% E    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit, l  o' E0 J' ?1 u/ H: U9 b/ P1 S
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 n! {9 a! Q; L  \" H- ]
) V! E- H( Z, D- _5 `2 P8 x
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
% q7 E- s% ?* h* Q; o% z+ P* r" y    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
' ?/ L# B. _5 s2 N% m8 a6 m6 f    mcasp->regs->PFUNC      = 0;          // All MCASPs3 `: ]/ l" O$ v. g* F2 b+ Z& k
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
, q7 E3 R! l9 ^
/ D0 H' I. ~. k/ X2 f    mcasp->regs->DITCTL     = 0x00000000; // Not used0 b& w- x& o7 J: e5 u. W: w2 @% _' h, ?
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
0 Q, L0 O; _  ?* A; _    mcasp->regs->AMUTE      = 0x00000000; // Not used9 N' ~6 {# K$ B. \" u4 p
' K5 V1 w8 a4 w* _3 k; V8 m8 |' ~
/* Starting sections of the McASP*/
, w. {/ a  }+ M% t7 u    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
# t' [7 I3 T1 B, `6 j    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
( i1 u! I/ |0 |0 d* o( M    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & `5 }' e) D: m5 Z5 Z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
5 R% g2 z' i' X1 F4 p& ~9 P( F0 H: P
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
. S. I* P. I' V$ Y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );5 w( l' _1 `1 E% D0 D- w
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
7 N, F/ H, E. |9 U# }5 V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );; C) h( Z* l$ _7 _% i3 o2 W

0 ^/ }4 t. m4 U1 H    mcasp->regs->XSTAT = 0x0000ffff;
# D8 X$ P) M8 b: N. Z% ~0 |+ x    mcasp->regs->RSTAT = 0x0000ffff; . g4 D8 D3 _9 L+ G7 @5 {( _

- |' J& I& |0 P% h; C: F( ^, N    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) {, p- g, ^2 [9 }' x5 s& m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; y3 D! `/ }% w0 L" ]/ ?# |3 \( O    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
( C! r9 l; J0 {' n' U' \& d    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );2 m, B# `. E+ \' K9 G

/ s( I. ?+ ^- n    /* Write a 0, so that no underrun occurs after releasing the state machine */! R4 e9 O3 V2 j1 Q! D4 Q
    mcasp->regs->XBUF5 = 0;
- @  K4 \6 W7 _0 I# \    mcasp->regs->RBUF0 = 0;3 y, }9 _# `+ O. J& U
" Z: D5 n5 F0 v3 V' \9 M
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
! g4 y# s) t3 f% t+ J( A    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, Q$ L  I, e3 c, D; {4 S    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
" O3 x. Z; R2 Q+ n" h/ e1 E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
  C/ u: t* h$ A' [& N! ?; `2 N; F9 d/ m
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
# v" h" S9 Q- I6 b2 ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );* Q' e5 N7 T1 I( X
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 n0 o! f: s- b) c2 k% B& Z6 e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
2 M% r  }" Z3 {2 Y5 W. P1 }6 |6 F" y; q% x: f  ?3 R% O
    CSR = 0x0000;% \  X$ T8 H8 H" P, ~1 b
    INTC_INTMUX1 = 0x3d;% w, X- l9 F+ a1 e# o
    ISTP = (unsigned int)vectors;
1 l! {$ m- ~( \3 x' m    ICR = 0xFFF0;  6 y0 x7 Y/ W  @0 E' H6 j$ g
    IER |= 0x12;  
- u2 ^  `( d! b  n% r, I    CSR |= 0x01;  
8 C9 N2 U7 r9 d. a* K, n/ R2 a  \3 n% w5 c1 Y

4 H% `) Y3 L4 T. U# W6 P  ~( R/ U- ]: X" O
还有就是两个输入输出函数:' l% X  S/ ^% f/ v- @- Y7 g) ?
void output_sample(Int32 out_data)  K& w8 ~0 a, l/ I
{
, i* t! o. N3 ]; Q$ A6 X; B* t  AIC31_data.uint = out_data;  . K3 _* r0 u4 R) z# c1 Z
  MCASP1_XBUF5_32BIT = AIC31_data.uint;1 S% w% v1 Y3 r6 Y
}
5 g+ [4 ?! M( Q) f7 d
" f. \3 {6 A% V& A) \! n% O& K8 HInt32 input_sample(void)! j- m  O+ ^, a8 Q$ Y
{  
3 N( M* i; F! B9 g! r/ E6 ~  AIC31_data.uint = MCASP1_RBUF0_32BIT;
5 z( \7 J/ i6 Z0 Y. W- e3 `! g  return (AIC31_data.uint);
' [0 h( ^7 K, v& j- W; }/ B8 u}
: q- W: M  W$ X4 @9 U; `) L- j* X/ |5 ^" q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-12-22 19:21 , Processed in 0.039222 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表