C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* A4 o. g2 {- ?main文件:
; j" X6 U9 Y  {. y1 Qinterrupt void interrupt4(void)  
. U" a' E* I. }0 J) l' ^{- P9 }3 I4 }! E$ z3 |  W
  Uint32 sample;
* S8 V& P  f1 x6 ~) S1 ?1 b% D$ b+ R6 w5 r& Q
  sample = input_sample(); // read L + R samples from ADC
0 D0 b8 F' n$ M1 c2 }7 R  output_sample(sample);   // write L + R samples to DAC 9 F2 x9 W- G  V* L/ z" y$ {! H
  return;
6 X5 E( f$ R2 R1 {3 ]}4 O" C! i% d0 S8 e! D  A

$ E: v; R$ G2 @, _) Kint main( void )
% R+ A# v, \4 O2 g( Q6 `{( ?+ Q+ h5 q0 v0 d$ a( Q# f4 z

0 E/ b- y: Y1 N% [- u    /* Initialize BSL */
6 f) _/ t: U" {. T" r( P    EVMC6747_init( );
, D4 E* B6 Z1 Q/ ^) K5 h5 ^        /* Call evmc6747_intr function */$ U5 G; O) [3 b* B: A
    aic3106_init( );
( R  h+ ?) h) z. `# L- B+ h; ], Q        while(1);
$ o- x2 a  t- V( `. z}
( Q2 k5 F6 q; @
7 k' ]1 B8 v! t8 c0 d/ B
: T* {6 ?7 c3 y' s% oaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
0 H9 a" b9 v" m! ]$ `6 T: W/* Initialize MCASP1 */( F) c# A$ M: y) j
    mcasp = &MCASP_MODULE_1;, f0 f$ D% \& N6 g
    mcasp->regs->GBLCTL  = 0;       // Reset% C- f; I; z8 I' x5 Z5 Q0 k% E1 ]
    mcasp->regs->RGBLCTL = 0;       // Reset RX% }; X" J0 @# ?, w- _
    mcasp->regs->XGBLCTL = 0;       // Reset TX
$ \  @; R' j7 f" A$ c& f. A! {' u; M    mcasp->regs->PWRDEMU = 1;       // Free-running! g5 M5 E9 p& D1 `' v# R* }
   // configure McASP0 receive registers1 e5 n' x% R8 T+ d
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
: r$ l1 M  ?9 \& |    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% ]1 c! I, {3 U) [3 m7 K: _    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ C9 a! B9 w0 j& R) i1 n2 T. l    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)7 d( `1 J( p3 \3 C9 ]7 f8 b' Y
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
9 _- d; q" T  w    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1; n2 ]3 E) K, p
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
; _# U* M- g* P$ p* Z# a6 R    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 H4 n, v- ^" @8 a9 V7 h8 w
  p5 z, L- o+ Q: W% O
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
. S* m, A) N: K6 Z; h: q( i    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; R) O7 ?% H* j+ z. ~    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word0 C* [4 b( m9 X: J2 ], o
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
; G/ M, Q0 J3 t; K0 S    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK; i7 j) R3 J" [" ?' R4 e
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,15 Q! Y) ^& R/ K8 o3 v" b  l, Y( j
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit6 _% W: F& t, q3 M, `* b
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! `  T# k& I4 S0 p
3 x" R9 x2 D# y& M4 n. h7 o    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
6 s7 N+ \$ _; S) G    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT: W7 B' K9 Q* l1 c4 h
    mcasp->regs->PFUNC      = 0;          // All MCASPs& f( o$ g. h- _
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1# ]; U4 s, D2 n6 l* Y  E5 B
' }3 G" F9 |) O  D- i
    mcasp->regs->DITCTL     = 0x00000000; // Not used& r9 J' _0 Z: l. e* ?0 j/ F2 G
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
+ W0 d& v5 Z+ B. r6 d. N    mcasp->regs->AMUTE      = 0x00000000; // Not used
/ \" ?8 z, i' E6 [7 d4 K9 |; q  y: f8 M9 h
/* Starting sections of the McASP*/
5 }# D3 q7 m" T$ y    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" J& ^; F+ z- u% G) J    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
7 o% M3 s: z# O) o4 g    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ! D5 l3 f1 r: k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );7 U7 t- [& J, W0 f$ ~0 u8 Z8 D
( w% ]0 R+ e+ H
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
! n/ ~% E6 A' h# w    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
0 v9 Q8 t" A* p/ f2 ^" @    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
; N! V2 o5 V4 m6 l9 _* P' l    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 d2 @+ x  N, f- ?/ A7 c+ k9 J: Q/ v4 e' j9 g
    mcasp->regs->XSTAT = 0x0000ffff;
% W( M3 s$ G: k( p    mcasp->regs->RSTAT = 0x0000ffff;
2 A0 S1 z  l/ V% `# u" \4 r7 W' F
2 B' q! q% d$ r; I) p7 Q- G! Y    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
9 l3 k8 {& G, `* o) v3 S# ~0 R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
/ f% e- S  [4 i2 E. y* C3 C$ V1 C8 E    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 6 @! }' \$ Q8 q# B' p4 [2 W0 ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );' n6 B$ K. k  \! Q0 @  x

9 @2 U" R% J  \    /* Write a 0, so that no underrun occurs after releasing the state machine */
8 W% P- f2 I& A$ a$ [1 w- w& L    mcasp->regs->XBUF5 = 0;* h# u( d  K6 }3 }/ D" G
    mcasp->regs->RBUF0 = 0;, d3 D0 I! m3 A

: n" Z+ d8 O  h2 E) W- D9 G6 h0 m    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ ^( f; s8 O0 T' a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ C, V* s* J0 k
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! f6 g3 i3 D9 I, _* @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% x" p  H1 ^7 w0 m" V& S4 s7 N9 _& G" ~
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( _. z1 Y8 Q' R+ v4 w; m1 y4 S7 f5 T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );+ L- @* r. n( e$ C+ J  C. r: z) s; g' P
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; # @( l" a1 n1 K, N: S( j2 j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 _  \, O5 F0 u

! j7 o# u/ y1 s9 c; X+ ^    CSR = 0x0000;* F! d+ A! g( n+ m" X, B
    INTC_INTMUX1 = 0x3d;* Z; |9 ~7 R- r( f
    ISTP = (unsigned int)vectors;0 z9 E. H! ]6 j. [
    ICR = 0xFFF0;  
( E- L& |) @; {8 q! b* D" W& u" A    IER |= 0x12;  
; U, P: C' h3 s& o& c! x0 |    CSR |= 0x01;  , O+ Z% }$ k, w% d  e
% V2 u. w3 s1 G  Z  e' v
3 q3 J' M, x. b8 u; O% N2 N2 n
% P+ Y  C) }& ~3 v# {: s
还有就是两个输入输出函数:6 ~! r6 _2 Z3 f9 T
void output_sample(Int32 out_data)! z) q/ t9 |4 M! t
{
5 d1 k5 p: l3 @8 o! ^  q6 x5 v  AIC31_data.uint = out_data;  
' k7 H! {" J. O' ?  MCASP1_XBUF5_32BIT = AIC31_data.uint;
; f' S- k2 d6 j4 _- ]" V: k3 x/ z}6 [" L7 N8 h5 R7 n5 A) s; D2 U

: v' ?' `2 L6 C& a- |Int32 input_sample(void)( [8 {) k5 x4 u9 z! s
{  
% Y  A. e3 K' `# R! m, g1 W  AIC31_data.uint = MCASP1_RBUF0_32BIT;
- X0 v. W+ P; l  return (AIC31_data.uint);4 ^; _9 [7 f! f/ T0 I
}: a2 ^5 x9 r) o) O

% T9 k" b; k. h' d. y) x
分享到:  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, 2026-4-8 22:57 , Processed in 0.043174 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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