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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
3 P1 E' p- d. n0 n9 F! Cmain文件:
. {* l4 F. h& g5 B0 T& l7 U* E# [6 yinterrupt void interrupt4(void)  + a; i! }) j6 S7 o; _# B+ i0 f" Z
{
6 I9 u  E# {* z8 |+ E0 t  Uint32 sample;
) j  y* i3 E% V/ J
& n+ o1 a% K* }$ I' m! e  sample = input_sample(); // read L + R samples from ADC6 V/ {( `5 T9 i5 ~6 q/ T# L
  output_sample(sample);   // write L + R samples to DAC
/ {& l, F3 [- I* Q4 z. m+ o" ~  return;
9 a4 ]$ c! s( K" p3 ?, Y}; t; k% L4 {7 l* _  _8 r

' n. t: V, `) N: A# Z) Dint main( void )
+ C5 X: ?- z! Y$ F( m0 P4 v{& I: Y' j. {3 `& [! U4 A8 D! n
4 d/ e! z. W7 @9 y5 \% O
    /* Initialize BSL */7 ^% U. W9 K. o1 {* P
    EVMC6747_init( );0 M4 i' Y$ k0 H$ m1 N
        /* Call evmc6747_intr function */0 b) Q* t5 o* I- v- U1 x
    aic3106_init( );% t4 v: l7 x1 e2 Y( m
        while(1);
+ p5 L: {+ {. N( x, `8 Q, F}  O0 d7 [+ p3 X# D, D; P

- ~) [0 O$ Q' o+ [" u5 L
( {4 {0 f' Q6 {9 eaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
5 M( v3 M* e( T& j: X& {5 e' K/* Initialize MCASP1 */
! F5 J  {. P4 |" z; J) {. E    mcasp = &MCASP_MODULE_1;' w$ A9 ~; L' r& H, y, a3 \
    mcasp->regs->GBLCTL  = 0;       // Reset
% x. d! l7 ^! T! U+ J% C    mcasp->regs->RGBLCTL = 0;       // Reset RX' o; i' P4 W& b
    mcasp->regs->XGBLCTL = 0;       // Reset TX
3 I$ V7 W0 j7 r7 c/ |! ?    mcasp->regs->PWRDEMU = 1;       // Free-running, J( R- B- o" L0 j
   // configure McASP0 receive registers
/ s0 O; y% E1 K" L8 ~/ Y9 _( u3 ^    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
# ^& X; P/ h: Q- F    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 @/ a; b: b9 l& S    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
# I6 A% z6 {/ _5 l# v    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
6 D" t6 u: z0 H# i1 e2 W# @! _    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
4 s  H2 b. B9 \    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1" C( e1 E" u7 l/ @# P( X4 E$ a
    mcasp->regs->RINTCTL    = 0x00000000; // Not used9 [; C  j: q6 `+ ~2 |1 X
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- s7 F! ?( p6 _, g7 J, R2 w
: S# @- [7 i; g; B" C
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used9 @  s( a; I+ P5 G5 M
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: v- t1 A1 e) L# p( T: J
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& {: n& C& }$ m    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
- r& ~* T+ w; _6 z( t    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK0 }: z  H. m; l8 A" a( I
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,14 k4 L- L1 b  R
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
& M$ \, c6 R& W    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 u" v9 B2 s: @6 o. w) `
# O- Z/ b& B5 [: Q0 ~' r
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN3 Y9 N' G' q) P% P6 Y0 x% U( D1 R, U
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
8 K- C8 V- X- Q1 p    mcasp->regs->PFUNC      = 0;          // All MCASPs2 P8 t( P- j9 }, }( X  E. o
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1% J6 W" ^# c; L! g8 A# W
$ t; q6 f1 P# Q% T* `; [
    mcasp->regs->DITCTL     = 0x00000000; // Not used
' v9 j- M; W$ W9 @, l3 a# v7 \    mcasp->regs->DLBCTL     = 0x00000000; // Not used2 k9 y4 @4 V5 S* m/ W
    mcasp->regs->AMUTE      = 0x00000000; // Not used
% D% O1 K* w/ a( i1 C
4 b) _" `: G" u) A! s/* Starting sections of the McASP*/" M7 S0 l* _! X
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; * c1 S1 B: S9 t# I: X$ c: u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
0 H( v; V, f3 O    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
. {0 a: {% i% F+ R4 }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 E. |+ s) D' u6 t4 ]
5 B  Q! g( N( H9 P
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 6 f+ ]5 ]( w' R/ y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
# \; M* S/ y1 H7 r    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 1 m( \6 o3 y+ \9 |: d5 c2 t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
; U# N5 a* b; t) R1 q* i2 i4 M, Y& q& b9 o! G' ~  l: |; |
    mcasp->regs->XSTAT = 0x0000ffff; : e+ F% {* Q' I+ O2 T: M4 R8 i7 M
    mcasp->regs->RSTAT = 0x0000ffff;
' T  X* n" X8 r! X0 B/ y$ [* V9 Y
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;" K/ t$ G: Q# o) d: {& H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
* J1 C4 {# j6 I2 k# |# E    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; $ k; I  g; Q. A! D" g: \& i
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
1 X* ~+ M9 [( K$ e$ |! V
! c; o9 w. n/ J* F    /* Write a 0, so that no underrun occurs after releasing the state machine */8 A9 r% G3 i$ Q. y2 T- e; O% E
    mcasp->regs->XBUF5 = 0;
* k/ m$ H# O4 ]' [    mcasp->regs->RBUF0 = 0;
  D, `% b# w2 A2 h8 I; s
- ?: d' y8 o# Z' p: b9 d) z    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 ~& @! r) Z- U6 b; T
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );4 q2 S$ W4 N: i# M2 X2 x
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ( Y" j( e) ^3 C; B4 H  ~9 `- n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );( {2 ?3 p5 c$ A6 k: S0 T

! D1 T$ P  u- b0 F  J3 O6 \    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
9 I: {5 |* }) v. h' Z5 m2 @" f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );# t. s# w( B, U; p) `# e: c
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! g3 L3 E( O! C! ^; m. Z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( i  h) d* d9 j4 G8 }
) U! j/ S& F  [: ]$ d    CSR = 0x0000;
. ~: r+ {% F' p' ^" J$ h/ ]* E    INTC_INTMUX1 = 0x3d;
2 o7 W  Q0 X6 M4 R! u$ u, j    ISTP = (unsigned int)vectors;1 I) `3 j( G, m8 ?+ W" h
    ICR = 0xFFF0;  7 s  i* g# k! j! d' }% ^
    IER |= 0x12;  
7 G6 m$ q2 s* t# i' @4 ?4 g: f    CSR |= 0x01;  
" o% l1 C( O1 W6 Z, N" U
: J" b3 C6 R( g0 H0 o; y# d: E+ `- F5 m3 C5 u( b( Y
/ ]9 G" |; U1 e
还有就是两个输入输出函数:2 M7 u8 h: u: }& {8 q3 M/ T
void output_sample(Int32 out_data)$ U& ~, c: o6 A7 I
{2 h7 x* F8 Y, K, n% \! G
  AIC31_data.uint = out_data;  - J5 N, R# A: Z& i4 d7 l
  MCASP1_XBUF5_32BIT = AIC31_data.uint;9 c" X/ I8 }  @" r: [
}
9 R: ~( Y% ]2 W  U7 D
$ `8 j1 V( v* q9 R. z9 G' E. E2 ZInt32 input_sample(void)1 L$ M  E5 \5 L3 o# z0 D' J8 A; f$ `
{    E  _* X& D! y/ n- }& k7 E! Y$ \3 Q
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
$ K' ~: ~6 A( \! j9 u  return (AIC31_data.uint);
8 b8 \- e6 s* N5 m% n% ^}
6 A0 W9 ^. s2 c+ q% R% z5 u# C) _& _/ e6 [# z8 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, 2026-2-10 21:04 , Processed in 0.040736 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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