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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
8 T# r1 H; w. Q& c3 j7 X( ~. Lmain文件:1 c, z: z+ s5 m) S
interrupt void interrupt4(void)  . P( }' T( K$ d# F" }% q
{
' C1 I& d4 e3 |: p, `% K5 H. R* y  Uint32 sample;
: u* K: u9 }) X7 ^
' e2 A3 k6 ~5 Z# R/ l! P3 b' B  sample = input_sample(); // read L + R samples from ADC
# d7 F- \8 X2 E; }/ G  output_sample(sample);   // write L + R samples to DAC 4 A( E/ X( ~: s) R& K6 k
  return;
  H# A; K( `" r8 O}  e( g+ x9 ?1 R) {% p
$ \  S5 u8 o# R% Y) u. y; o/ Z
int main( void )
* i# `* l- _# a7 E+ i3 _{& b3 }& X7 }0 M
+ t4 M+ z+ ^' g
    /* Initialize BSL */& p& ?0 `1 X% N! Z' m
    EVMC6747_init( );: f1 j, D2 F) I: d+ |
        /* Call evmc6747_intr function */+ R3 ?6 b+ \$ d$ z' ~. p
    aic3106_init( );
$ o3 j3 T1 L5 y0 P8 M        while(1);9 B, `+ D. N# D6 x* U" |0 t
}
3 J4 t5 Y- c: o0 M) w" c5 V
# _; ~8 [: L5 v
* t( s( Z2 r' I' E% u/ l$ B& iaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
. S1 A; I( w5 G; {& ~: _. M/* Initialize MCASP1 */
+ Q$ T& k# r& K4 w    mcasp = &MCASP_MODULE_1;
9 s: c: O5 {5 O7 O% a$ V    mcasp->regs->GBLCTL  = 0;       // Reset
1 w8 X8 E0 ]5 v! o    mcasp->regs->RGBLCTL = 0;       // Reset RX
) U$ C$ F: V+ N& C7 W& q    mcasp->regs->XGBLCTL = 0;       // Reset TX% K7 M& y+ k$ Z% A* Z% t4 W/ {# K
    mcasp->regs->PWRDEMU = 1;       // Free-running
. f$ v* m* n* C: y. @; A   // configure McASP0 receive registers
5 x; L1 E4 a8 u- q, x% f    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used* q4 Y+ z9 |' ]# c4 R
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus  [  g  v8 S0 U( _$ |: ?8 s; K
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word$ ~' P) {3 \" t- D+ n+ o
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)7 i( Z  Z; s- s+ v) P& u# R2 m' `
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
& R; |; {. U) A    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
( }4 e& l/ V5 F+ W1 L; I    mcasp->regs->RINTCTL    = 0x00000000; // Not used* o' B* C, p" u2 J0 p, K
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 g$ u1 F. o, n& {; n
! a  ]' v  W3 G% P2 n    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used- ]% I) Q" M: A: s# [
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ A/ l# R0 \6 K+ G3 S! R1 X    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
9 P+ O7 F' y1 ^+ S8 R3 l    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16( R( H: j8 v0 K% U1 ^/ W; ^
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK' R2 u" M" l) O! \& q" V
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1* U& ?' x7 C% q7 U0 g+ R7 Z! I
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit( _3 K3 U1 a& i' j
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' }9 i; X; L( w) h
! f% c0 I5 d7 w+ P( Z& X    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
: |* _6 k+ Q& t& V    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
8 j) f6 n- \0 G: x$ e* q    mcasp->regs->PFUNC      = 0;          // All MCASPs
3 s. N( F' P9 E0 k    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
8 {) X  y, }3 V! a" x& D1 Q5 S: O: V6 {. ~& {
    mcasp->regs->DITCTL     = 0x00000000; // Not used' m, P' G, A' {8 T3 O- B% x6 O. L1 c# Q
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
, B7 O$ z8 Z; \" I6 E    mcasp->regs->AMUTE      = 0x00000000; // Not used; @. _6 \+ R' u6 j% c) _

; n$ ^1 z3 k9 Z/* Starting sections of the McASP*/# C$ X- F" J3 s% J8 b+ T. G. S
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 {2 _: H1 y5 ?" J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  2 q6 b. e6 D, q2 a/ @( D
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; e0 S( j2 ]/ u/ B* H& l) Z( P    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 ~6 a, x  r8 V5 L
  }3 J3 W) e/ y1 J4 R& U2 H6 X
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 3 W9 `. \+ Z/ D) [, N/ e) @( @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );. T4 B6 h& d+ G4 _# Q" M
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - f) J$ f" `' m3 w1 g7 G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
+ v2 }9 f" ]3 C; d% x% F
7 X8 o+ C. g0 C    mcasp->regs->XSTAT = 0x0000ffff;
. X& R  K5 p% `% O; v8 k9 n    mcasp->regs->RSTAT = 0x0000ffff; 9 Y5 t5 q! R: B  T' m9 X2 X8 u, g

, i0 \7 P2 y! r/ g    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;1 c1 J' w" L4 K$ k+ w$ Q2 Q; }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
( B; K( }) }, P    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
3 s& b' }# l! Q( Z* |    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- |2 o$ P% `, L3 R9 I2 }! J5 m. O
6 j0 E% r; x& x8 q& j* E) _+ E/ o    /* Write a 0, so that no underrun occurs after releasing the state machine */9 i9 \9 q) J/ ^1 U) M/ z2 P3 G
    mcasp->regs->XBUF5 = 0;/ B8 y3 l2 B: q5 s9 r( s/ F
    mcasp->regs->RBUF0 = 0;
& L7 x" q6 G7 y/ W0 d. E$ t" z/ M
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; $ i' }/ L' r% {' o( a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );( s1 y3 C9 D; x7 F8 m
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ; ^1 H- E, j! ^. t- b
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
4 {2 ~6 E5 B, L4 @0 F( X5 _. h2 e& c8 L% B) Q
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; / z9 ?% p# ?& E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
* o. x8 C/ V" M1 X: S: A+ ^7 n    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; * V8 k* |( v2 F/ L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );- W2 q! m' L; f! Z( g( Q' s

: @4 n0 a4 [6 L5 \! S5 C; d6 N    CSR = 0x0000;: Z: f3 a# n' q2 Q3 I6 y* ^
    INTC_INTMUX1 = 0x3d;/ [5 H, y7 r& e' f4 C9 b
    ISTP = (unsigned int)vectors;' l: T# @9 p8 g
    ICR = 0xFFF0;  
( Z: n% @0 }4 a4 a! m9 G6 v/ @9 y; y    IER |= 0x12;  ! a5 S  e. O% x6 o
    CSR |= 0x01;  
) B  h' v1 a7 \% b: j5 t
- C0 h6 W7 x: |! ^! \7 N/ b6 f( P* P. S
2 Z) P. m1 G+ @6 @  H+ i
还有就是两个输入输出函数:
0 U3 H0 b9 A  X: j. E% W2 w. u/ \void output_sample(Int32 out_data)
+ J! R" D1 t1 X{
6 ]( F2 J3 \; z! B. G9 w  AIC31_data.uint = out_data;  
5 j$ c1 @' G1 S0 y7 h& ?  MCASP1_XBUF5_32BIT = AIC31_data.uint;. ]' ^, E2 [  E% b. v2 ]
}; k" I4 g( J8 L+ [: e, m! b$ \

1 t% i/ _) Y  {" N  D# c* d- iInt32 input_sample(void)
: F: z3 k3 t' w: n+ c{  
$ d9 r. y6 Y  a1 ^& k8 L2 y  AIC31_data.uint = MCASP1_RBUF0_32BIT;
% N$ [3 a! y$ }6 o$ x" u7 @8 T  return (AIC31_data.uint);
: L6 A" c# G5 T, G}1 T% x$ x5 Q: j. T7 l
$ R5 P  R5 t) e
分享到:  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-11-21 06:23 , Processed in 0.046241 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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