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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) h. M+ x: J$ g
main文件:
, \& Z: Y9 Y0 t  Uinterrupt void interrupt4(void)  + ^, l7 [: {3 q, c
{5 U, ?7 ?) X" ]3 y7 C
  Uint32 sample;- h! H* K4 v6 b
8 \2 N7 H9 q1 m) w
  sample = input_sample(); // read L + R samples from ADC
9 q3 G" r4 M& b# o1 U2 O  output_sample(sample);   // write L + R samples to DAC
* N! W+ v% n$ W( S2 G" r  return;
" W# `4 ]: m+ Q) S+ v}0 [3 X4 N+ L8 U# I" U

4 |0 D4 |! M9 o9 F+ qint main( void )* M. c2 m& U2 ?3 `
{
9 E3 K7 n/ ?9 `$ [$ Z: f0 }# t6 P3 P0 o' F% k" o9 z
    /* Initialize BSL */
6 Z( ]+ z5 ~9 y* u/ f" N    EVMC6747_init( );( M* y+ m# o9 u, V# b4 s) z# I2 p* `' ~
        /* Call evmc6747_intr function */
; n& }3 c0 @+ M5 v  `7 C    aic3106_init( );, K0 s0 s6 c& ~8 j( c  m/ j' c
        while(1);
* V) T2 \/ Z! f& ^' t! |$ f}
+ H9 q. m# }0 d! x5 v% X, r5 a" J( r
8 V/ u+ \8 B$ y! F; u2 }. z
7 `8 F1 s& o3 s- X# maic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题2 D* Q5 s. t+ i4 o
/* Initialize MCASP1 */, m% N  T1 b# J
    mcasp = &MCASP_MODULE_1;) ^/ `; R/ f0 F+ ]
    mcasp->regs->GBLCTL  = 0;       // Reset8 |# S% t& O  M( g* d, e+ i
    mcasp->regs->RGBLCTL = 0;       // Reset RX5 v4 a  Z+ {3 z$ J" u$ Y
    mcasp->regs->XGBLCTL = 0;       // Reset TX5 _9 M& E" s. G, {
    mcasp->regs->PWRDEMU = 1;       // Free-running
; E6 o' g7 K2 o( Z. Q( \   // configure McASP0 receive registers$ t) u$ c9 x3 |- s; k; t8 w
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
6 T9 \- F1 q0 I1 m. m    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
  m% |% a- E* Y9 }    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
3 ~) i; A! R& J+ ~+ z7 `" s6 w    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 e+ f. h) Z& c/ d7 V6 e- l
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)+ b6 r$ U* f0 D; u2 ?
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
0 m7 B* q# {. O: m7 ?9 _( ~/ J; @8 C    mcasp->regs->RINTCTL    = 0x00000000; // Not used: i9 P1 W, ?0 \2 I( d
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" s2 z4 b  ?+ u
1 X7 D8 i0 M1 c8 X    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used4 C3 k6 m: ~( [8 |2 V
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 H9 R, f; I; w  P( M* `
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word9 S, z3 u1 s. l& V8 f1 z
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16+ V6 @2 L* W9 C# v" Q2 S* B" R
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK/ P' I  L5 u9 {- L; r9 a1 y
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
! {3 Q2 ?2 E4 C* e8 h    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit1 N  C# t) f; x
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- K. o9 X4 b) {! p% q5 d2 V7 E6 t. O1 q8 m
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
! m2 x3 O, M; x' ]  _: L; ?) [4 W0 q    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT/ U' |3 |2 c$ d9 {6 S2 q1 M; {
    mcasp->regs->PFUNC      = 0;          // All MCASPs
* ]2 j, s* V1 ^3 |    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. \4 x3 m: Q" q

4 c' O! h4 f0 T: N    mcasp->regs->DITCTL     = 0x00000000; // Not used
  Y/ k  B0 h/ ]( n    mcasp->regs->DLBCTL     = 0x00000000; // Not used: d( Z( S, U; }
    mcasp->regs->AMUTE      = 0x00000000; // Not used
- p! [3 c& e0 I, V: Y+ R. P& V# B9 b/ X( w& k/ C
/* Starting sections of the McASP*/
# a, x; K- K4 P6 {. A! G% ?. O" `: M7 F+ Z    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ o0 K" U* P/ |; @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  $ |+ i# M3 T' ~3 I
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
9 C; U. B0 q% G+ z7 M( R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
! m8 k3 {" ?8 J
4 p/ k7 g; k$ B4 U    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
2 V, Z  G0 P3 o5 @/ ^7 i0 W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );' ^& S1 b+ x' E1 o# @' ?% O
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
, ]  K2 L" L5 W* A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );6 q$ U: @- n  e
" e& a* \5 f2 O2 n  D% W
    mcasp->regs->XSTAT = 0x0000ffff; 3 N2 l: e* i4 @
    mcasp->regs->RSTAT = 0x0000ffff; & i* |2 t0 P3 M, k

( D! }$ K- ~2 e2 M9 s) ?    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, ]& A* G4 T  B. U5 {) i; O; }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );8 |5 C' }# f1 a$ n  S* T
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
1 i0 [; V, m4 a' K% R$ w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- ^& m- g* v. C4 z
4 P8 P4 u* b! z* f) k    /* Write a 0, so that no underrun occurs after releasing the state machine */) j* V# l& ]2 n) n
    mcasp->regs->XBUF5 = 0;0 _9 P# g  Y* v2 {+ B
    mcasp->regs->RBUF0 = 0;
6 R# g; w# e. d% F; U' a- p& I& I$ Z  d0 c7 R9 g) k" Q
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
& S3 V2 e5 J$ T7 Y& ^' J    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 i7 P, W" P& F; V0 p/ D
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ i2 J0 z5 b/ b1 E) ^" z- v) k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) I7 ]$ Z8 N0 f2 {: Y, [7 ^
6 ]- ^2 ?+ C9 l; V
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; / f( }4 _% t2 y' R3 k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );& v7 \: y/ O' g0 m* h
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! O6 ?4 z' M" q+ @4 _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
  p' X& D0 m4 ^$ y. M% N1 Q1 r7 Y% N
    CSR = 0x0000;
1 L) r0 L( B' V' U8 d6 R    INTC_INTMUX1 = 0x3d;
& W# i% N7 S5 ]1 G" z, v    ISTP = (unsigned int)vectors;
0 F3 W0 y+ `% S6 H7 _6 [    ICR = 0xFFF0;  
# G6 X) C( l8 S) A$ K- z    IER |= 0x12;  
8 h+ Q% c( K& ^( z) y" O+ G    CSR |= 0x01;  . L6 V2 `% O5 V) i$ |

! x& a' s0 @8 o) H8 g6 [9 B0 N+ H6 `
9 y) I' \  c$ ]. Q) s: t
还有就是两个输入输出函数:" i/ X# O. s, B- Y' w$ L( x3 l
void output_sample(Int32 out_data)( [0 I* U. A7 \# U
{& K# B3 J2 I+ @
  AIC31_data.uint = out_data;  
  Z' W: b. J' \& f" F  MCASP1_XBUF5_32BIT = AIC31_data.uint;' z+ ]3 R8 I) A4 Y. j' f0 P
}
# {. T& Y' o+ |' r
. M3 c: T* j* LInt32 input_sample(void)# B: v* ^3 U0 [7 V6 g3 p: y
{  
1 p4 G" q0 Y) D  AIC31_data.uint = MCASP1_RBUF0_32BIT;" D& M" [* K1 @9 Z, v$ n: p
  return (AIC31_data.uint);+ m$ B' ~" ~1 \; U, [- V0 H  e
}
- V+ a9 `/ _$ W& y1 T! W' e2 |: x9 R" |1 J
分享到:  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-27 01:24 , Processed in 0.074377 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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